package logic import ( "context" "path" "easygoadmin/api/v1" "easygoadmin/internal/service" "easygoadmin/utility/upload" ) // ============================== 文件上传业务实现 ============================== // sUpload 文件上传业务实现 // 实现 service.IUpload 接口,承载文件上传模块的业务逻辑 type sUpload struct{} func init() { service.RegisterUpload(&sUpload{}) } // UploadFile 上传单文件 // // 文件先落入临时目录,表单保存时由 SaveFromTemp 转正至正式目录 func (s *sUpload) UploadFile(ctx context.Context, req *v1.UploadFileReq) (res *v1.UploadFileRes, err error) { typ := req.Type if typ != "image" { typ = "file" } r, err := upload.SaveTemp(ctx, req.File, typ) if err != nil { return nil, err } return &v1.UploadFileRes{ OriginalName: r.Name, FileExtension: r.Ext, FileType: r.Mime, FileSize: r.Size, FileName: path.Base(r.Path), FilePath: r.Path, FileUrl: r.Url, }, nil } // UploadFiles 批量上传文件 // // 逐个上传文件,任一文件上传失败时返回错误 func (s *sUpload) UploadFiles(ctx context.Context, req *v1.UploadFilesReq) (res *v1.UploadFilesRes, err error) { res = &v1.UploadFilesRes{List: []v1.UploadFileRes{}} for _, f := range req.Files { if f == nil { continue } one, e := s.UploadFile(ctx, &v1.UploadFileReq{File: f}) if e != nil { return nil, e } res.List = append(res.List, *one) } return res, nil }