|
@@ -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
|