|
@@ -2615,57 +2615,77 @@ func (this *FutureGoodChartInfoController) ChartInfoBase64Upload() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ NotBackendGenerate, _ := this.GetBool("BackendGenerate", false)
|
|
|
+ if NotBackendGenerate {
|
|
|
+ b, _ := regexp.MatchString(`^data:\s*image\/(\w+);base64,`, imgData)
|
|
|
+ if !b {
|
|
|
+ br.Msg = "图片格式不正确"
|
|
|
+ br.ErrMsg = "图片格式不正确"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ re, _ := regexp.Compile(`^data:\s*image\/(\w+);base64,`)
|
|
|
+ base64Str := re.ReplaceAllString(imgData, "")
|
|
|
+ base64Str = strings.Replace(base64Str, " ", "", -1)
|
|
|
+ imgData = base64Str
|
|
|
+ }
|
|
|
//var saveToOssPath string
|
|
|
randStr := utils.GetRandStringNoSpecialChar(28)
|
|
|
var fileName, outFileName string
|
|
|
- fileName = randStr + ".txt"
|
|
|
- //saveSvgPath = uploadDir + fileName
|
|
|
- err := utils.SaveToFile(imgData, fileName)
|
|
|
- if err != nil {
|
|
|
- br.Msg = "图片保存失败"
|
|
|
- br.ErrMsg = "图片保存失败,Err:" + err.Error()
|
|
|
- return
|
|
|
- }
|
|
|
outFileName = randStr + ".png"
|
|
|
-
|
|
|
- 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 NotBackendGenerate {
|
|
|
+ err := utils.SaveBase64ToFile(imgData, outFileName)
|
|
|
if err != nil {
|
|
|
- utils.FileLog.Info("execute command failed, output: , error: \n" + string(output) + err.Error())
|
|
|
- errorChannel <- err
|
|
|
+ br.Msg = "图片保存失败"
|
|
|
+ br.ErrMsg = "图片保存失败,Err:" + err.Error()
|
|
|
return
|
|
|
}
|
|
|
- doneChannel <- true
|
|
|
- }()
|
|
|
+ } else {
|
|
|
+ fileName = randStr + ".txt"
|
|
|
+ //saveSvgPath = uploadDir + fileName
|
|
|
+ err := utils.SaveToFile(imgData, fileName)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "图片保存失败"
|
|
|
+ br.ErrMsg = "图片保存失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ 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
|
|
|
+ }()
|
|
|
|
|
|
- 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()))
|
|
|
- br.Msg = "图片生成失败"
|
|
|
- br.ErrMsg = "图片生成失败, 执行超时" + e.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()))
|
|
|
+ br.Msg = "图片生成失败"
|
|
|
+ br.ErrMsg = "图片生成失败, 执行超时" + e.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ fmt.Println("timeout kill process")
|
|
|
+ case <-doneChannel:
|
|
|
+ fmt.Println("done")
|
|
|
+ case err := <-errorChannel:
|
|
|
+ br.Msg = "文件上传失败"
|
|
|
+ br.ErrMsg = fmt.Sprintf("execute command failure err: %s", err.Error())
|
|
|
+ fmt.Println("execute command failure err:" + err.Error())
|
|
|
return
|
|
|
}
|
|
|
- fmt.Println("timeout kill process")
|
|
|
- case <-doneChannel:
|
|
|
- fmt.Println("done")
|
|
|
- case err := <-errorChannel:
|
|
|
- br.Msg = "文件上传失败"
|
|
|
- br.ErrMsg = fmt.Sprintf("execute command failure err: %s", err.Error())
|
|
|
- fmt.Println("execute command failure err:" + err.Error())
|
|
|
- return
|
|
|
+ defer func() {
|
|
|
+ os.Remove(fileName)
|
|
|
+ }()
|
|
|
}
|
|
|
-
|
|
|
defer func() {
|
|
|
- os.Remove(fileName)
|
|
|
os.Remove(outFileName)
|
|
|
}()
|
|
|
|
|
@@ -2696,7 +2716,7 @@ func (this *FutureGoodChartInfoController) ChartInfoBase64Upload() {
|
|
|
br.ErrMsg = "初始化OSS服务失败"
|
|
|
return
|
|
|
}
|
|
|
- resourceUrl, err = ossClient.UploadFile(outFileName, outFileName, "")
|
|
|
+ resourceUrl, err := ossClient.UploadFile(outFileName, outFileName, "")
|
|
|
if err != nil {
|
|
|
br.Msg = "文件上传失败"
|
|
|
br.ErrMsg = "文件上传失败,Err:" + err.Error()
|
|
@@ -3593,7 +3613,7 @@ func (this *FutureGoodChartInfoController) ChartInfoImgSetBySvg() {
|
|
|
resp := new(models.ResourceResp)
|
|
|
|
|
|
// 通过svg图片生成图片资源地址
|
|
|
- resourceUrl, err, errMsg := services.GetResourceUrlBySvgImg(imgData,NotBackendGenerate)
|
|
|
+ resourceUrl, err, errMsg := services.GetResourceUrlBySvgImg(imgData, NotBackendGenerate)
|
|
|
if err != nil {
|
|
|
br.Msg = errMsg
|
|
|
br.ErrMsg = err.Error()
|