package logic import ( "app.yhyue.com/moapp/jybase/common" "bp.jydev.jianyu360.cn/BaseService/biService/rpc/biservice" "context" "fmt" "github.com/gogf/gf/v2/util/gconv" "io" "net/http" "net/url" "strings" "bp.jydev.jianyu360.cn/BaseService/biService/api/internal/svc" "bp.jydev.jianyu360.cn/BaseService/biService/api/internal/types" "github.com/zeromicro/go-zero/core/logx" ) type UpFileLogic struct { logx.Logger ctx context.Context svcCtx *svc.ServiceContext r *http.Request } func NewUpFileLogic(ctx context.Context, svcCtx *svc.ServiceContext, r *http.Request) *UpFileLogic { return &UpFileLogic{ Logger: logx.WithContext(ctx), ctx: ctx, svcCtx: svcCtx, r: r, } } func (l *UpFileLogic) UpFile(req *types.UpFileReq) (resp *types.BiResp, err error) { file, header, _ := l.r.FormFile("file") defer file.Close() bt, _ := io.ReadAll(file) size := fmt.Sprintf("%.4f", common.Float64All(header.Size)/1024) for { if strings.HasSuffix(size, "0") { size = strings.TrimRight(size, "0") continue } if strings.HasSuffix(size, ".") { size = strings.TrimRight(size, ".") break } break } fileSize := size + "KB" fileName := "" formUrl := l.r.Form.Get("url") u, err := url.Parse(formUrl) if err != nil { fmt.Println("Failed to parse URL:", err) return } queryValues, _ := url.ParseQuery(u.RawQuery) fileName = queryValues.Get("fileId") index := strings.Index(fileName, "-") // 截取 "-" 后边的内容 fileName = fileName[index+1:] if fileName == "" { return &types.BiResp{Error_code: -1, Error_msg: "附件名称不能为空,url参数有误"}, nil } res, err := l.svcCtx.BiServiceRpc.UpFile(l.ctx, &biservice.UpFileReq{ AppId: req.AppId, UserId: req.BaseUserId, PositionId: req.PositionId, EntUserId: req.EntUserId, EntId: req.EntId, Stype: req.FileType, File: bt, FileName: fileName, FileSize: fileSize, }) data := gconv.Map(gconv.UnsafeBytesToStr(res.Data)) return &types.BiResp{Error_code: res.ErrorCode, Error_msg: res.ErrorMsg, Data: data}, err }