gin-blog/internal/routess/api/upload.go
2021-05-31 10:13:26 +08:00

53 lines
1.3 KiB
Go

package api
import (
"blog/global"
"blog/internal/service"
"blog/pkg/app"
"blog/pkg/convert"
"blog/pkg/errorcode"
"blog/pkg/upload"
"github.com/gin-gonic/gin"
)
type Upload struct{}
func NewUpload() Upload {
return Upload{}
}
// @Summary 上传图片
// @Produce json
// @Param type formData int true "文件类型1图片" required Enums(1,2,3)
// @Param file formData file true "文件"
// @Success 200 {object} service.FileInfo "成功"
// @Failure 400 {object} errorcode.Error "请求错误"
// @Failure 500 {object} errorcode.Error "内部错误"
// @Router /upload/file [post]
func (u Upload) UploadFile(c *gin.Context) {
response := app.NewResponse(c)
file, fileHeader, err := c.Request.FormFile("file")
if err != nil {
response.ToErrorResponse(errorcode.InvalidParams.WithDetails(err.Error()))
return
}
fileType := convert.StrTo(c.PostForm("type")).MustInt()
if fileHeader == nil || fileType <= 0 {
response.ToErrorResponse(errorcode.InvalidParams)
return
}
svc := service.New(c.Request.Context())
fileInfo, err := svc.UploadFile(upload.FileType(fileType), file, fileHeader)
if err != nil {
global.Logger.Errorf("svc.UploadFile err: %v", err)
response.ToErrorResponse(errorcode.ErrorUploadFileFail.WithDetails(err.Error()))
return
}
response.ToResponse(gin.H{
"file_access_url": fileInfo.AccessUrl,
})
}