kobe6258 před 2 dny
rodič
revize
093b5a2004
1 změnil soubory, kde provedl 64 přidání a 51 odebrání
  1. 64 51
      services/file.go

+ 64 - 51
services/file.go

@@ -108,7 +108,7 @@ func saveToFileByHeader(fileHeader *multipart.FileHeader, tofile string) error {
 // @return resourceUrl string
 // @return err error
 // @return errMsg string
-func GetResourceUrlBySvgImg(imgData string) (resourceUrl string, err error, errMsg string) {
+func GetResourceUrlBySvgImg(imgData string, picType ...string) (resourceUrl string, err error, errMsg string) {
 	errMsg = "图表保存失败"
 	uploadDir := "static/images/"
 	if !utils.FileIsExist(uploadDir) {
@@ -118,67 +118,80 @@ func GetResourceUrlBySvgImg(imgData string) (resourceUrl string, err error, errM
 			return
 		}
 	}
-
-	//var saveToOssPath string
+	var fileName, outFileName, picTypeStr string
+	uploadDir = "static/images/"
 	randStr := utils.GetRandStringNoSpecialChar(28)
-	var fileName, outFileName string
-	fileName = randStr + ".txt"
-	fileName = uploadDir + fileName
-	err = utils.SaveToFile(imgData, fileName)
-	if err != nil {
-		err = errors.New("图片保存失败,Err:" + err.Error())
-		return
-	}
-
-	// 删除临时存储的svg文件
-	defer func() {
-		err = os.Remove(fileName)
-		if err != nil {
-			utils.FileLog.Info("删除临时存储的svg文件失败, err: " + err.Error())
-		}
-	}()
 	outFileName = randStr + ".png"
+	if len(picType) > 0 {
+		picTypeStr = picType[0]
+	}
 
-	doneChannel := make(chan bool, 1)
-	errorChannel := make(chan error, 1)
-
-	cmd := exec.Command("highcharts-export-server", "--infile", fileName, "--constr", "Chart", "--scale", "2", "--workers", "10", "--workLimit", "3", "--outfile", outFileName)
-
-	go func() {
-		output, err := cmd.CombinedOutput()
+	if strings.ToLower(picTypeStr) == "png" {
+		err = utils.SaveBase64ToFile(imgData, outFileName)
 		if err != nil {
-			utils.FileLog.Info("execute command failed, output: , error: \n" + string(output) + err.Error())
-			errorChannel <- err
+			err = errors.New("图片保存失败,Err:" + err.Error())
 			return
 		}
-		doneChannel <- true
-	}()
-	defer func() {
-		_ = os.Remove(outFileName)
+	} else {
+		//var saveToOssPath string
+		fileName = randStr + ".txt"
+		fileName = uploadDir + fileName
+		err = utils.SaveToFile(imgData, fileName)
 		if err != nil {
-			utils.FileLog.Info("删除生产的图片文件失败, err: " + err.Error())
+			err = errors.New("图片保存失败,Err:" + err.Error())
+			return
 		}
-	}()
 
-	select {
-	case <-time.After(30 * time.Second):
-		utils.FileLog.Info("执行超过30秒 杀死超时进程")
-		e := cmd.Process.Kill()
-		if e != nil {
-			fmt.Println("cmd kill err: ", e.Error())
-			utils.FileLog.Info(fmt.Sprintf("cmd kill err: %s", e.Error()))
-			errMsg = "图片生成失败"
-			err = errors.New("图片生成失败, 执行超时" + e.Error())
+		// 删除临时存储的svg文件
+		defer func() {
+			err = os.Remove(fileName)
+			if err != nil {
+				utils.FileLog.Info("删除临时存储的svg文件失败, err: " + err.Error())
+			}
+		}()
+
+
+		doneChannel := make(chan bool, 1)
+		errorChannel := make(chan error, 1)
+
+		cmd := exec.Command("highcharts-export-server", "--infile", fileName, "--constr", "Chart", "--scale", "2", "--workers", "10", "--workLimit", "3", "--outfile", outFileName)
+
+		go func() {
+			output, err := cmd.CombinedOutput()
+			if err != nil {
+				utils.FileLog.Info("execute command failed, output: , error: \n" + string(output) + err.Error())
+				errorChannel <- err
+				return
+			}
+			doneChannel <- true
+		}()
+		defer func() {
+			_ = os.Remove(outFileName)
+			if err != nil {
+				utils.FileLog.Info("删除生产的图片文件失败, err: " + err.Error())
+			}
+		}()
+
+		select {
+		case <-time.After(30 * time.Second):
+			utils.FileLog.Info("执行超过30秒 杀死超时进程")
+			e := cmd.Process.Kill()
+			if e != nil {
+				fmt.Println("cmd kill err: ", e.Error())
+				utils.FileLog.Info(fmt.Sprintf("cmd kill err: %s", e.Error()))
+				errMsg = "图片生成失败"
+				err = errors.New("图片生成失败, 执行超时" + e.Error())
+				return
+			}
+			fmt.Println("timeout kill process")
+		case <-doneChannel:
+			fmt.Println("done")
+		case e := <-errorChannel:
+			errMsg = "文件上传失败"
+			err = errors.New(fmt.Sprintf("execute command failure err: %s", e.Error()))
+			fmt.Println("execute command failure err:" + e.Error())
 			return
 		}
-		fmt.Println("timeout kill process")
-	case <-doneChannel:
-		fmt.Println("done")
-	case e := <-errorChannel:
-		errMsg = "文件上传失败"
-		err = errors.New(fmt.Sprintf("execute command failure err: %s", e.Error()))
-		fmt.Println("execute command failure err:" + e.Error())
-		return
 	}
 
 	//上传到阿里云 和 minio