fileuploadlogic.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package logic
  2. import (
  3. "context"
  4. "fmt"
  5. "io/ioutil"
  6. "net/http"
  7. "strings"
  8. "app.yhyue.com/moapp/jybase/common"
  9. fpb "bp.jydev.jianyu360.cn/BaseService/fileCenter/rpc/pb"
  10. cm "bp.jydev.jianyu360.cn/CRM/application/api/common"
  11. "bp.jydev.jianyu360.cn/CRM/application/api/internal/svc"
  12. "bp.jydev.jianyu360.cn/CRM/application/api/internal/types"
  13. "github.com/zeromicro/go-zero/core/logx"
  14. )
  15. type FileUploadLogic struct {
  16. logx.Logger
  17. ctx context.Context
  18. svcCtx *svc.ServiceContext
  19. r *http.Request
  20. }
  21. func NewFileUploadLogic(ctx context.Context, svcCtx *svc.ServiceContext, r *http.Request) *FileUploadLogic {
  22. return &FileUploadLogic{
  23. Logger: logx.WithContext(ctx),
  24. ctx: ctx,
  25. svcCtx: svcCtx,
  26. r: r,
  27. }
  28. }
  29. func (l *FileUploadLogic) FileUpload(req *types.FileUploadReq) (resp *types.Reply, err error) {
  30. resp = &types.Reply{}
  31. file, header, _ := l.r.FormFile("file")
  32. defer file.Close()
  33. bt, _ := ioutil.ReadAll(file)
  34. fmt.Println(cm.C.OssBucketName, cm.C.OssUrl, header.Filename)
  35. up, err := cm.FileCenterRpc.Upload(l.ctx, &fpb.UploadReq{
  36. File: bt,
  37. OssBucketName: cm.C.OssBucketName,
  38. OssUrl: cm.C.OssUrl,
  39. Name: header.Filename,
  40. })
  41. if up == nil || up.Url == "" {
  42. resp.Error_code = -1
  43. resp.Error_msg = "上传失败"
  44. return
  45. }
  46. key := up.Key
  47. size := fmt.Sprintf("%.4f", common.Float64All(header.Size)/1024)
  48. for {
  49. if strings.HasSuffix(size, "0") {
  50. size = strings.TrimRight(size, "0")
  51. continue
  52. }
  53. if strings.HasSuffix(size, ".") {
  54. size = strings.TrimRight(size, ".")
  55. break
  56. }
  57. break
  58. }
  59. fileSize := size + "KB"
  60. var data map[string]interface{}
  61. fileTypeTmp := strings.Split(header.Filename, ".")
  62. var ftype string
  63. if len(fileTypeTmp) > 0 && len(fileTypeTmp) == 2 {
  64. ftype = strings.Split(header.Filename, ".")[1]
  65. }
  66. data = map[string]interface{}{
  67. "filename": header.Filename,
  68. "ftype": ftype,
  69. "fid": key,
  70. "size": fileSize,
  71. "ossurl": cm.C.OssUrl,
  72. "url": up.Url,
  73. }
  74. resp.Data = data
  75. return
  76. }