123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- package conversion
- import (
- IC "app.yhyue.com/moapp/jy_docs/rpc/partnerlib/init"
- "app.yhyue.com/moapp/jy_docs/rpc/partnerlib/util"
- "app.yhyue.com/moapp/jy_docs/services/model"
- "app.yhyue.com/moapp/jy_docs/services/partner"
- "app.yhyue.com/moapp/jyfs/rpc/filesystem"
- "fmt"
- "os"
- "os/exec"
- "sync"
- "time"
- )
- type Conversion struct {
- DocId string
- FileName string
- FileId string
- Suffix string
- Content []byte
- Size int
- }
- var (
- CL = &sync.Mutex{}
- filePath = "conversion/input"
- fileSuffix = "pdf"
- )
- func NewConversion(docId, fileName, fileId, suffix string, b []byte, size int) *Conversion {
- return &Conversion{
- DocId: docId,
- FileName: fileName,
- FileId: fileId,
- Suffix: suffix,
- Content: b,
- Size: size,
- }
- }
- func (c *Conversion) ToConversion() (msg string) {
- CL.Lock()
- defer CL.Unlock()
- // 检查目录是否存在
- _, err := os.Stat(filePath)
- if os.IsNotExist(err) {
- // 创建输出文件夹
- err := os.MkdirAll(filePath, 0755)
- if err != nil {
- msg = fmt.Sprintf("Error creating output folder:%s", err.Error())
- return
- }
- }
- //写入文件
- inputFile := fmt.Sprintf("%s/%s.%s", filePath, c.FileId, c.Suffix)
- file, err := os.Create(inputFile)
- if err != nil {
- msg = fmt.Sprintf("Error creating file:%s", err.Error())
- return
- }
- defer file.Close()
- // 设置文件权限
- err = file.Chmod(0777)
- if err != nil {
- msg = fmt.Sprintf("Error setting file permissions for %s: %v\n", filePath, err)
- return
- }
- // 写入文件流
- _, err = file.Write(c.Content)
- if err != nil {
- msg = fmt.Sprintf("Error writing to file:%s", err.Error())
- return
- }
- // 开始执行转换
- cmd := exec.Command("unoconv", "-f", fileSuffix, inputFile)
- cmd.Stdout = nil
- cmd.Stderr = nil
- err = cmd.Run()
- if err != nil {
- msg = fmt.Sprintf("conversion failed: %s", err.Error())
- return
- }
- pdfFile := fmt.Sprintf("%s/%s.%s", filePath, c.FileId, fileSuffix)
- c.Content, err = os.ReadFile(pdfFile)
- if err != nil {
- msg = fmt.Sprintf("read pdf err:%s", err.Error())
- return
- }
- if len(c.Content) > 0 {
- //上传文件
- fileRes := util.FileUpload(&filesystem.SaveFileReq{
- Domain: IC.C.OssInfo.BucketName,
- FileId: fmt.Sprintf("%s.%s", c.FileId, fileSuffix),
- Meta: map[string]string{
- "docName": c.FileName,
- "docSuffix": fileSuffix,
- "docSize": fmt.Sprintf("%d", c.Size),
- },
- RawFileContent: c.Content,
- Charset: util.GetFileChardet(c.Content),
- })
- if fileRes.OssDocId == "" {
- msg = fmt.Sprintf(" upload oss err:%s", fileRes.Msg)
- } else {
- //移除文件
- os.Remove(inputFile)
- os.Remove(pdfFile)
- if err = partner.DocsUpdate(2, model.Doc{
- Id: c.DocId,
- OssPdfId: fmt.Sprintf("%s.%s", c.FileId, fileSuffix),
- UpdateDate: time.Now(),
- }); err != nil {
- msg = fmt.Sprintf(" update doc osspdfid err :%s", err.Error())
- }
- }
- }
- return
- }
|