62 lines
1.5 KiB
Go
62 lines
1.5 KiB
Go
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
|
|
}
|