|
@@ -1,12 +1,17 @@
|
|
package controllers
|
|
package controllers
|
|
|
|
|
|
import (
|
|
import (
|
|
|
|
+ "encoding/json"
|
|
"fmt"
|
|
"fmt"
|
|
"hongze/hongze_public_api/models"
|
|
"hongze/hongze_public_api/models"
|
|
"hongze/hongze_public_api/services"
|
|
"hongze/hongze_public_api/services"
|
|
|
|
+ "hongze/hongze_public_api/services/ppt2img"
|
|
"hongze/hongze_public_api/utils"
|
|
"hongze/hongze_public_api/utils"
|
|
|
|
+ "io/ioutil"
|
|
"os"
|
|
"os"
|
|
"os/exec"
|
|
"os/exec"
|
|
|
|
+ "path"
|
|
|
|
+ "strings"
|
|
"time"
|
|
"time"
|
|
)
|
|
)
|
|
|
|
|
|
@@ -188,3 +193,137 @@ func (this *ImageController) Base64Upload() {
|
|
br.Data = resp
|
|
br.Data = resp
|
|
return
|
|
return
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+// Ppt2Image
|
|
|
|
+// @Title ppt转图片
|
|
|
|
+// @Description ppt转图片
|
|
|
|
+// @Param request body models.Ppt2ImgReq true "type json string"
|
|
|
|
+// @Success 200 新增成功
|
|
|
|
+// @router /ppt2img [post]
|
|
|
|
+func (this *ImageController) Ppt2Image() {
|
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
|
+ defer func() {
|
|
|
|
+ this.Data["json"] = br
|
|
|
|
+ this.ServeJSON()
|
|
|
|
+ }()
|
|
|
|
+ body := this.Ctx.Input.RequestBody
|
|
|
|
+ req := new(models.Ppt2ImgReq)
|
|
|
|
+ err := json.Unmarshal(body, &req)
|
|
|
|
+ if err != nil {
|
|
|
|
+ br.Msg = "参数解析失败"
|
|
|
|
+ br.ErrMsg = "参数解析失败,Err:" + err.Error()
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if req.PptUrl == "" {
|
|
|
|
+ br.Msg = "参数错误,ppt下载地址不能为空"
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 下载ppt
|
|
|
|
+ pptPath,err := utils.DownloadImage(req.PptUrl)
|
|
|
|
+ if err != nil{
|
|
|
|
+ br.Msg = "下载ppt失败"
|
|
|
|
+ br.ErrMsg = "下载ppt失败,Err:"+err.Error()
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ defer func() {
|
|
|
|
+ os.Remove(pptPath)
|
|
|
|
+ }()
|
|
|
|
+
|
|
|
|
+ // ppt转pdf
|
|
|
|
+ converterType := "pdf"
|
|
|
|
+ pdfPath, err := ppt2img.FuncDocs2Pdf(utils.LibreOfficePath, pptPath, "./static/pdf", converterType)
|
|
|
|
+ if err != nil{
|
|
|
|
+ br.Msg = "ppt转pdf失败"
|
|
|
|
+ br.ErrMsg = "ppt转pdf失败,Err:"+err.Error()
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ defer func() {
|
|
|
|
+ // 删除指定pdf目录
|
|
|
|
+ os.Remove(pdfPath)
|
|
|
|
+ }()
|
|
|
|
+
|
|
|
|
+ // 生成临时存放图片的目录
|
|
|
|
+ uploadDir := "./static/pdf/png/"+utils.GetRandStringNoSpecialChar(16)+"/"
|
|
|
|
+ {
|
|
|
|
+ if !utils.FileIsExist(uploadDir) {
|
|
|
|
+ err := os.MkdirAll(uploadDir, 0777)
|
|
|
|
+ if err != nil {
|
|
|
|
+ br.Msg = "创建存放图片的目录失败"
|
|
|
|
+ br.ErrMsg = "创建存放图片的目录失败,Err:"+err.Error()
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ defer func() {
|
|
|
|
+ // 删除指定临时目录
|
|
|
|
+ os.RemoveAll(uploadDir)
|
|
|
|
+ }()
|
|
|
|
+
|
|
|
|
+ pdfPathList := strings.Split(pdfPath,"/")
|
|
|
|
+ pngName := strings.Split(path.Base(pdfPathList[len(pdfPathList)-1]), ".")[0] //图片名称
|
|
|
|
+ convPngName := uploadDir + pngName+".png"
|
|
|
|
+
|
|
|
|
+ // pdf 转图片
|
|
|
|
+ _,err = ppt2img.Pdf2Img(pdfPath,convPngName)
|
|
|
|
+ if err != nil{
|
|
|
|
+ br.Msg = "pdf转png失败"
|
|
|
|
+ br.ErrMsg = "pdf转png失败,Err:"+err.Error()
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // oss的图片存放地址
|
|
|
|
+ resourceUrlList := make([]string,0)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ // 获取生成的文件列表
|
|
|
|
+ fileInfoList,err := ioutil.ReadDir(uploadDir)
|
|
|
|
+ if err != nil {
|
|
|
|
+ br.Msg = "获取生成的文件列表失败"
|
|
|
|
+ br.ErrMsg = "获取生成的文件列表失败,Err:"+err.Error()
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ countFile := len(fileInfoList)
|
|
|
|
+ for i:=0;i<countFile;i++{
|
|
|
|
+ tmpFilePath := fmt.Sprintf("%s%s-%d.png",uploadDir,pngName,i)
|
|
|
|
+ if utils.FileIsExist(tmpFilePath){
|
|
|
|
+ resourceUrl,tmpErr := uploadToAliOss(tmpFilePath)
|
|
|
|
+ if tmpErr != nil{
|
|
|
|
+ br.Msg = "上传图片至oss失败"
|
|
|
|
+ br.ErrMsg = "上传图片至oss失败,Err:"+err.Error()
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ resourceUrlList = append(resourceUrlList,resourceUrl)
|
|
|
|
+ }else{
|
|
|
|
+ br.Msg = "上传图片至oss失败"
|
|
|
|
+ br.ErrMsg = "上传图片至oss失败,Err:"+err.Error()
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ br.Ret = 200
|
|
|
|
+ br.Msg = "转换成功"
|
|
|
|
+ br.Data = resourceUrlList
|
|
|
|
+ return
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// 上传文件到阿里云
|
|
|
|
+func uploadToAliOss(outFileName string) (resourceUrl string,err error) {
|
|
|
|
+ var saveToOssPath string
|
|
|
|
+ randStr := utils.GetRandStringNoSpecialChar(28)
|
|
|
|
+ uploadDir := "static/images/"
|
|
|
|
+ saveToOssPath = uploadDir + time.Now().Format("200601/20060102/")
|
|
|
|
+
|
|
|
|
+ saveToOssPath += randStr + ".png"
|
|
|
|
+
|
|
|
|
+ //上传到阿里云
|
|
|
|
+ //fmt.Println("upload:", outFileName, saveToOssPath)
|
|
|
|
+ err = services.UploadFileToAliyun("", outFileName, saveToOssPath)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ fileHost := "https://hzstatic.hzinsights.com/"
|
|
|
|
+ resourceUrl = fileHost + saveToOssPath
|
|
|
|
+ return
|
|
|
|
+}
|