package upload import ( "context" "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("image/" + 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 }