直接上代码了哈
API定义
@server(
prefix: /api/file/v1
group: file
)
service file {
@doc "查看app列表"
@handler uploadFile
post /uploadFile (UploadFileReq) returns (UploadFileResp)
}```
### handler
```go
func UploadFileHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
fileData, handler, err := r.FormFile("file")
if err != nil {
httpx.Error(w, err)
return
}
defer fileData.Close()
filename := handler.Filename
l := file.NewUploadFileLogic(r.Context(), svcCtx)
resp, err := l.UploadFile(&fileData, filename)
syserr.ResponseErr(resp, err, r.Context(), w)
}
}
service
package file
import (
"context"
"mime/multipart"
"AggregatePayment/common/file"
"AggregatePayment/common/utils"
"AggregatePayment/file/cmd/api/internal/svc"
"AggregatePayment/file/cmd/api/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type UploadFileLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
func NewUploadFileLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UploadFileLogic {
return &UploadFileLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *UploadFileLogic) UploadFile(data *multipart.File, fileName string) (resp *types.UploadFileResp, err error) {
resp = new(types.UploadFileResp)
filePath := "businessData/" + utils.CreateUUID() + "." + fileName
ossConfig := l.svcCtx.Config.OssConfig
l.Logger.Info(ossConfig)
err = file.UploadFile(*data, filePath, file.OssConfig{
AccessKeyId: ossConfig.AccessKeyId,
AccessKeySecret: ossConfig.AccessKeySecret,
BucketName: ossConfig.BucketName,
Endpoint: ossConfig.Endpoint,
BucketDoMan: ossConfig.BucketDoMan,
})
if err != nil {
l.Logger.Errorf("上传文件失败, err:%s", err.Error())
return
}
path := l.svcCtx.Config.OssConfig.BucketDoMan + "/" + filePath
resp.Data = path
return
}```