package logic import ( "context" "fmt" "io/ioutil" "net/http" "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) { resp = &types.Reply{} file, header, _ := l.r.FormFile("file") status := 1 defer file.Close() bt, _ := ioutil.ReadAll(file) up, err := cm.FileCenterRpc.Upload(l.ctx, &fpb.UploadReq{ File: bt, OssBucketName: cm.C.OssBucketName, OssUrl: cm.C.OssUrl, Name: header.Filename, }) 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(header.Filename, ".") var ftype string if len(fileTypeTmp) > 0 && len(fileTypeTmp) == 2 { ftype = strings.Split(header.Filename, ".")[1] } fl := &service.File{ Name: header.Filename, //附件名称 Suffix: ftype, //文件后缀 FileType: 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 }