59 lines
1.2 KiB
Go
59 lines
1.2 KiB
Go
package upload
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"server/utility/ecode"
|
|
"server/utility/oss"
|
|
"strings"
|
|
|
|
"github.com/gogf/gf/v2/errors/gerror"
|
|
"github.com/gogf/gf/v2/util/grand"
|
|
|
|
"server/internal/model"
|
|
"server/internal/service"
|
|
)
|
|
|
|
type sUpload struct {
|
|
oss struct{}
|
|
}
|
|
|
|
func New() service.IUpload {
|
|
return &sUpload{
|
|
oss: struct{}{},
|
|
}
|
|
}
|
|
func init() {
|
|
service.RegisterUpload(New())
|
|
}
|
|
func (s *sUpload) Upload(ctx context.Context, in *model.UploadIn) (res *model.UploadOut, err error) {
|
|
// 判断文件格式
|
|
fileType := in.File.Header.Get("Content-Type")
|
|
if !strings.HasPrefix(fileType, "image/") {
|
|
return nil, gerror.New("图片格式错误")
|
|
}
|
|
//判断图片大小
|
|
if in.File.Size > 10*1024*1024 {
|
|
return nil, gerror.New("图片大小最多10M")
|
|
}
|
|
// 获取图片后缀
|
|
exit := strings.Split(fileType, "/")[1]
|
|
// 文件名称
|
|
fileName := strings.ToLower(fmt.Sprintf("%s/%s.%s", in.Type, grand.Letters(32), exit))
|
|
// 开始上传图片
|
|
client, ok := oss.GetClient("aliyun")
|
|
if !ok {
|
|
return nil, ecode.Fail.Sub("未配置OSS")
|
|
}
|
|
uploadRes, err := client.UploadFile(ctx, &model.OssUploadFileInput{
|
|
Filename: fileName,
|
|
File: in.File,
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &model.UploadOut{
|
|
Url: uploadRes.Url,
|
|
}, nil
|
|
}
|