实现图片上传到oss
This commit is contained in:
@ -11,6 +11,7 @@ import (
|
||||
"server/internal/controller/merchant"
|
||||
"server/internal/controller/rewardType"
|
||||
"server/internal/controller/role"
|
||||
"server/internal/controller/upload"
|
||||
"server/internal/controller/wx"
|
||||
"server/internal/middleware"
|
||||
)
|
||||
@ -33,6 +34,7 @@ var (
|
||||
group.Middleware(middleware.Auth)
|
||||
group.Middleware(middleware.Casbin)
|
||||
group.Bind(
|
||||
upload.NewV1(),
|
||||
admin.NewV1(),
|
||||
role.NewV1(),
|
||||
merchant.NewV1(),
|
||||
|
||||
5
internal/controller/upload/upload.go
Normal file
5
internal/controller/upload/upload.go
Normal file
@ -0,0 +1,5 @@
|
||||
// =================================================================================
|
||||
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
|
||||
// =================================================================================
|
||||
|
||||
package upload
|
||||
15
internal/controller/upload/upload_new.go
Normal file
15
internal/controller/upload/upload_new.go
Normal file
@ -0,0 +1,15 @@
|
||||
// =================================================================================
|
||||
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
|
||||
// =================================================================================
|
||||
|
||||
package upload
|
||||
|
||||
import (
|
||||
"server/api/upload"
|
||||
)
|
||||
|
||||
type ControllerV1 struct{}
|
||||
|
||||
func NewV1() upload.IUploadV1 {
|
||||
return &ControllerV1{}
|
||||
}
|
||||
17
internal/controller/upload/upload_v1_upload.go
Normal file
17
internal/controller/upload/upload_v1_upload.go
Normal file
@ -0,0 +1,17 @@
|
||||
package upload
|
||||
|
||||
import (
|
||||
"context"
|
||||
"server/internal/model"
|
||||
"server/internal/service"
|
||||
|
||||
"server/api/upload/v1"
|
||||
)
|
||||
|
||||
func (c *ControllerV1) Upload(ctx context.Context, req *v1.UploadReq) (res *v1.UploadRes, err error) {
|
||||
upload, err := service.Upload().Upload(ctx, &model.UploadIn{File: req.File})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &v1.UploadRes{Url: upload.Url}, nil
|
||||
}
|
||||
@ -13,5 +13,6 @@ import (
|
||||
_ "server/internal/logic/role"
|
||||
_ "server/internal/logic/store"
|
||||
_ "server/internal/logic/storeAdmin"
|
||||
_ "server/internal/logic/upload"
|
||||
_ "server/internal/logic/user"
|
||||
)
|
||||
|
||||
@ -78,5 +78,7 @@ func (s *sMerchant) Audit(ctx context.Context, in *model.MerchantAuditIn) (out *
|
||||
}
|
||||
|
||||
func (s *sMerchant) Create(ctx context.Context, in *model.MerchantCreateIn) (out *model.CreateOut, err error) {
|
||||
// 管理员创建的商户,无需审核,直接可以使用,需要注意商户关联的主账号的 username
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
57
internal/logic/upload/upload.go
Normal file
57
internal/logic/upload/upload.go
Normal file
@ -0,0 +1,57 @@
|
||||
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
|
||||
}
|
||||
32
internal/service/upload.go
Normal file
32
internal/service/upload.go
Normal file
@ -0,0 +1,32 @@
|
||||
// ================================================================================
|
||||
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
|
||||
// You can delete these comments if you wish manually maintain this interface file.
|
||||
// ================================================================================
|
||||
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"server/internal/model"
|
||||
)
|
||||
|
||||
type (
|
||||
IUpload interface {
|
||||
Upload(ctx context.Context, in *model.UploadIn) (res *model.UploadOut, err error)
|
||||
}
|
||||
)
|
||||
|
||||
var (
|
||||
localUpload IUpload
|
||||
)
|
||||
|
||||
func Upload() IUpload {
|
||||
if localUpload == nil {
|
||||
panic("implement not found for interface IUpload, forgot register?")
|
||||
}
|
||||
return localUpload
|
||||
}
|
||||
|
||||
func RegisterUpload(i IUpload) {
|
||||
localUpload = i
|
||||
}
|
||||
Reference in New Issue
Block a user