|
@@ -3220,13 +3220,13 @@ func (this *FutureGoodChartInfoController) BaseInfoEdit() {
|
|
|
br.IsAddLog = true
|
|
|
}
|
|
|
|
|
|
-// ChartInfoImgSetByBase64
|
|
|
+// ChartInfoImgSetBySvg
|
|
|
// @Title 图表图片上传
|
|
|
// @Param Img query string true "图片"
|
|
|
// @Param ChartInfoId query int true "图表ID"
|
|
|
// @Success 200 {object} models.ResourceResp
|
|
|
-// @router /chart_info/image/set_by_base64 [post]
|
|
|
-func (this *FutureGoodChartInfoController) ChartInfoImgSetByBase64() {
|
|
|
+// @router /chart_info/image/set_by_svg [post]
|
|
|
+func (this *FutureGoodChartInfoController) ChartInfoImgSetBySvg() {
|
|
|
br := new(models.BaseResponse).Init()
|
|
|
defer func() {
|
|
|
this.Data["json"] = br
|
|
@@ -3241,96 +3241,16 @@ func (this *FutureGoodChartInfoController) ChartInfoImgSetByBase64() {
|
|
|
chartInfoId, _ := this.GetInt("ChartInfoId", 0)
|
|
|
if chartInfoId <= 0 {
|
|
|
br.Msg = "图片参数错误"
|
|
|
- br.ErrMsg = "图片参数错误,Img Is Empty"
|
|
|
+ br.ErrMsg = "图片参数错误,ChartInfoId Is Empty"
|
|
|
return
|
|
|
}
|
|
|
resp := new(models.ResourceResp)
|
|
|
|
|
|
- uploadDir := "static/images/"
|
|
|
- if !utils.FileIsExist(uploadDir) {
|
|
|
- err := os.MkdirAll(uploadDir, utils.DIR_MOD)
|
|
|
- if err != nil {
|
|
|
- br.Msg = "图表保存失败"
|
|
|
- br.ErrMsg = "存储目录创建失败,Err:" + err.Error()
|
|
|
- return
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- //var saveToOssPath string
|
|
|
- randStr := utils.GetRandStringNoSpecialChar(28)
|
|
|
- var fileName, outFileName string
|
|
|
- fileName = randStr + ".txt"
|
|
|
- fileName = uploadDir + fileName
|
|
|
- err := utils.SaveToFile(imgData, fileName)
|
|
|
+ // 通过svg图片生成图片资源地址
|
|
|
+ resourceUrl, err, errMsg := services.GetResourceUrlBySvgImg(imgData)
|
|
|
if err != nil {
|
|
|
- br.Msg = "图片保存失败"
|
|
|
- br.ErrMsg = "图片保存失败,Err:" + err.Error()
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- // 删除临时存储的svg文件
|
|
|
- defer func() {
|
|
|
- err = os.Remove(fileName)
|
|
|
- if err != nil {
|
|
|
- utils.FileLog.Info("删除临时存储的svg文件失败, err: " + err.Error())
|
|
|
- }
|
|
|
- }()
|
|
|
- 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 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()))
|
|
|
- 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
|
|
|
- }
|
|
|
-
|
|
|
- //上传到阿里云 和 minio
|
|
|
- resourceUrl := ``
|
|
|
- ossClient := services.NewOssClient()
|
|
|
- if ossClient == nil {
|
|
|
- br.Msg = "上传失败"
|
|
|
- br.ErrMsg = "初始化OSS服务失败"
|
|
|
- return
|
|
|
- }
|
|
|
- resourceUrl, err = ossClient.UploadFile(outFileName, outFileName, "")
|
|
|
- if err != nil {
|
|
|
- br.Msg = "文件上传失败"
|
|
|
- br.ErrMsg = "文件上传失败,Err:" + err.Error()
|
|
|
+ br.Msg = errMsg
|
|
|
+ br.ErrMsg = err.Error()
|
|
|
return
|
|
|
}
|
|
|
|