package logic import ( "context" "fmt" "io/ioutil" "net/http" "net/url" "strings" "app.yhyue.com/moapp/jybase/common" fpb "bp.jydev.jianyu360.cn/BaseService/fileCenter/rpc/pb" cm "bp.jydev.jianyu360.cn/CRM/application/api/common" "bp.jydev.jianyu360.cn/CRM/application/api/internal/svc" "bp.jydev.jianyu360.cn/CRM/application/api/internal/types" "bp.jydev.jianyu360.cn/CRM/application/service" "github.com/zeromicro/go-zero/core/logx" ) type FileUploadLogic struct { logx.Logger ctx context.Context svcCtx *svc.ServiceContext r *http.Request } func NewFileUploadLogic(ctx context.Context, svcCtx *svc.ServiceContext, r *http.Request) *FileUploadLogic { return &FileUploadLogic{ Logger: logx.WithContext(ctx), ctx: ctx, svcCtx: svcCtx, r: r, } } func (l *FileUploadLogic) FileUpload(req *types.FileUploadReq) (resp *types.Reply, err error) { fileTypeMap := map[int64]string{ 1: "文件类型", 2: "产品介绍", 3: "项目方案", 4: "立项报告", 5: "报价文件", 6: "招标文件", 7: "投标文件", 8: "中标通知书", 9: "合同", 10: "发票", 11: "其他文件", } resp = &types.Reply{} file, header, _ := l.r.FormFile("file") status := 1 defer file.Close() bt, _ := ioutil.ReadAll(file) 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:] up, err := cm.FileCenterRpc.Upload(l.ctx, &fpb.UploadReq{ File: bt, OssBucketName: cm.C.OssBucketName, OssUrl: cm.C.OssUrl, Name: fileName, NeedEncryption: false, }) if up == nil || up.Url == "" { resp.Error_code = -1 resp.Error_msg = "上传失败" resp.Data = map[string]interface{}{"status": -1} return } key := up.Key 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" var data map[string]interface{} fileTypeTmp := strings.Split(fileName, ".") var ftype string if len(fileTypeTmp) > 0 && len(fileTypeTmp) == 2 { ftype = strings.Split(fileName, ".")[1] } fl := &service.File{ Name: fileName, //附件名称 Suffix: ftype, //文件后缀 FileType: fileTypeMap[req.FileType], //文件类型,产品介绍、项目方案、立项报告、报价文件、招标文件、投标文件、中标通知书、合同、发票、其他文件 Size: fileSize, //文件大小 Oss: up.Url, //oss地址 BusinessId: req.BusinessId, //业务id Types: req.Types, //类型;1:跟进记录-线下 2:跟进记录-线上 3:跟进记录-备忘 4:销售机会-项目文档 5:客户-客户档案 } if !fl.Add() { status = -1 } data = map[string]interface{}{ "filename": header.Filename, "ftype": ftype, "fid": key, "size": fileSize, "ossurl": cm.C.OssUrl, "url": up.Url, "status": status, } resp.Data = data return }