Go-zero 文件上传

直接上代码了哈

API定义

@server(
	prefix: /api/file/v1
	group: file
)
service file {
	@doc "查看app列表"
	@handler uploadFile
	post /uploadFile (UploadFileReq) returns (UploadFileResp)
}```

### handler

```go
// UploadFileHandler 上传文件
func UploadFileHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
	return func(w http.ResponseWriter, r *http.Request) {
		// if err := r.ParseMultipartForm(32 << 20); err != nil {
		// 	httpx.ErrorCtx(r.Context(), w, err)
		// 	return
		// }
		// 解析多部分表单,并处理错误
		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
}```

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值