upfilelogic.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package logic
  2. import (
  3. "app.yhyue.com/moapp/jybase/common"
  4. "bp.jydev.jianyu360.cn/BaseService/biService/rpc/biservice"
  5. "context"
  6. "fmt"
  7. "github.com/gogf/gf/v2/util/gconv"
  8. "io"
  9. "net/http"
  10. "net/url"
  11. "strings"
  12. "bp.jydev.jianyu360.cn/BaseService/biService/api/internal/svc"
  13. "bp.jydev.jianyu360.cn/BaseService/biService/api/internal/types"
  14. "github.com/zeromicro/go-zero/core/logx"
  15. )
  16. type UpFileLogic struct {
  17. logx.Logger
  18. ctx context.Context
  19. svcCtx *svc.ServiceContext
  20. r *http.Request
  21. }
  22. func NewUpFileLogic(ctx context.Context, svcCtx *svc.ServiceContext, r *http.Request) *UpFileLogic {
  23. return &UpFileLogic{
  24. Logger: logx.WithContext(ctx),
  25. ctx: ctx,
  26. svcCtx: svcCtx,
  27. r: r,
  28. }
  29. }
  30. func (l *UpFileLogic) UpFile(req *types.UpFileReq) (resp *types.BiResp, err error) {
  31. file, header, _ := l.r.FormFile("file")
  32. defer file.Close()
  33. bt, _ := io.ReadAll(file)
  34. size := fmt.Sprintf("%.4f", common.Float64All(header.Size)/1024)
  35. for {
  36. if strings.HasSuffix(size, "0") {
  37. size = strings.TrimRight(size, "0")
  38. continue
  39. }
  40. if strings.HasSuffix(size, ".") {
  41. size = strings.TrimRight(size, ".")
  42. break
  43. }
  44. break
  45. }
  46. fileSize := size + "KB"
  47. fileName := ""
  48. formUrl := l.r.Form.Get("url")
  49. u, err := url.Parse(formUrl)
  50. if err != nil {
  51. fmt.Println("Failed to parse URL:", err)
  52. return
  53. }
  54. queryValues, _ := url.ParseQuery(u.RawQuery)
  55. fileName = queryValues.Get("fileId")
  56. index := strings.Index(fileName, "-")
  57. // 截取 "-" 后边的内容
  58. fileName = fileName[index+1:]
  59. if fileName == "" {
  60. return &types.BiResp{Error_code: -1, Error_msg: "附件名称不能为空,url参数有误"}, nil
  61. }
  62. res, err := l.svcCtx.BiServiceRpc.UpFile(l.ctx, &biservice.UpFileReq{
  63. AppId: req.AppId,
  64. UserId: req.BaseUserId,
  65. PositionId: req.PositionId,
  66. EntUserId: req.EntUserId,
  67. EntId: req.EntId,
  68. Stype: req.FileType,
  69. File: bt,
  70. FileName: fileName,
  71. FileSize: fileSize,
  72. })
  73. data := gconv.Map(gconv.UnsafeBytesToStr(res.Data))
  74. return &types.BiResp{Error_code: res.ErrorCode, Error_msg: res.ErrorMsg, Data: data}, err
  75. }