fileuploadlogic.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. package logic
  2. import (
  3. "context"
  4. "fmt"
  5. "io/ioutil"
  6. "net/http"
  7. "net/url"
  8. "strings"
  9. "app.yhyue.com/moapp/jybase/common"
  10. fpb "bp.jydev.jianyu360.cn/BaseService/fileCenter/rpc/pb"
  11. cm "bp.jydev.jianyu360.cn/CRM/application/api/common"
  12. "bp.jydev.jianyu360.cn/CRM/application/api/internal/svc"
  13. "bp.jydev.jianyu360.cn/CRM/application/api/internal/types"
  14. "bp.jydev.jianyu360.cn/CRM/application/service"
  15. "github.com/zeromicro/go-zero/core/logx"
  16. )
  17. type FileUploadLogic struct {
  18. logx.Logger
  19. ctx context.Context
  20. svcCtx *svc.ServiceContext
  21. r *http.Request
  22. }
  23. func NewFileUploadLogic(ctx context.Context, svcCtx *svc.ServiceContext, r *http.Request) *FileUploadLogic {
  24. return &FileUploadLogic{
  25. Logger: logx.WithContext(ctx),
  26. ctx: ctx,
  27. svcCtx: svcCtx,
  28. r: r,
  29. }
  30. }
  31. func (l *FileUploadLogic) FileUpload(req *types.FileUploadReq) (resp *types.Reply, err error) {
  32. fileTypeMap := map[int64]string{
  33. 1: "文件类型",
  34. 2: "产品介绍",
  35. 3: "项目方案",
  36. 4: "立项报告",
  37. 5: "报价文件",
  38. 6: "招标文件",
  39. 7: "投标文件",
  40. 8: "中标通知书",
  41. 9: "合同",
  42. 10: "发票",
  43. 11: "其他文件",
  44. }
  45. resp = &types.Reply{}
  46. file, header, _ := l.r.FormFile("file")
  47. status := 1
  48. defer file.Close()
  49. bt, _ := ioutil.ReadAll(file)
  50. up, err := cm.FileCenterRpc.Upload(l.ctx, &fpb.UploadReq{
  51. File: bt,
  52. OssBucketName: cm.C.OssBucketName,
  53. OssUrl: cm.C.OssUrl,
  54. Name: header.Filename,
  55. NeedEncryption: false,
  56. })
  57. formUrl := l.r.Form.Get("url")
  58. u, err := url.Parse(formUrl)
  59. if err != nil {
  60. fmt.Println("Failed to parse URL:", err)
  61. return
  62. }
  63. queryValues, _ := url.ParseQuery(u.RawQuery)
  64. fileName := queryValues.Get("fileId")
  65. index := strings.Index(fileName, "-")
  66. // 截取 "-" 后边的内容
  67. fileName = fileName[index+1:]
  68. if up == nil || up.Url == "" {
  69. resp.Error_code = -1
  70. resp.Error_msg = "上传失败"
  71. resp.Data = map[string]interface{}{"status": -1}
  72. return
  73. }
  74. key := up.Key
  75. size := fmt.Sprintf("%.4f", common.Float64All(header.Size)/1024)
  76. for {
  77. if strings.HasSuffix(size, "0") {
  78. size = strings.TrimRight(size, "0")
  79. continue
  80. }
  81. if strings.HasSuffix(size, ".") {
  82. size = strings.TrimRight(size, ".")
  83. break
  84. }
  85. break
  86. }
  87. fileSize := size + "KB"
  88. var data map[string]interface{}
  89. fileTypeTmp := strings.Split(fileName, ".")
  90. var ftype string
  91. if len(fileTypeTmp) > 0 && len(fileTypeTmp) == 2 {
  92. ftype = strings.Split(fileName, ".")[1]
  93. }
  94. fl := &service.File{
  95. Name: fileName, //附件名称
  96. Suffix: ftype, //文件后缀
  97. FileType: fileTypeMap[req.FileType], //文件类型,产品介绍、项目方案、立项报告、报价文件、招标文件、投标文件、中标通知书、合同、发票、其他文件
  98. Size: fileSize, //文件大小
  99. Oss: up.Url, //oss地址
  100. BusinessId: req.BusinessId, //业务id
  101. Types: req.Types, //类型;1:跟进记录-线下 2:跟进记录-线上 3:跟进记录-备忘 4:销售机会-项目文档 5:客户-客户档案
  102. }
  103. if !fl.Add() {
  104. status = -1
  105. }
  106. data = map[string]interface{}{
  107. "filename": header.Filename,
  108. "ftype": ftype,
  109. "fid": key,
  110. "size": fileSize,
  111. "ossurl": cm.C.OssUrl,
  112. "url": up.Url,
  113. "status": status,
  114. }
  115. resp.Data = data
  116. return
  117. }