package interfaces import ( "fm-upload/internal/data/model" response "fm-upload/internal/data/model" "fm-upload/internal/data/model/request" "fm-upload/utils" "github.com/gin-gonic/gin" ) type UploadHTTPServer interface { Ping(*gin.Context) Upload(*gin.Context, *request.UploadRequest) (*request.UploadResponse, error) ImagesController(*gin.Context, *request.CompressImagesRequest) (*request.ImagesCompressResponse, error) ImageController(*gin.Context, *request.CompressImageRequest) (*model.ImageCompressResponse, error) } // @Summary 上传文件 // @Description 上传文件,类型:image/video/doc/avatar // @Tags 华为云/上传 // @Param file formData file true "上传文件" // @Param body formData request.UploadRequest true "form表单其他参数" // @Produce json // @Success 200 {object} request.UploadResponse "非video类型文件:没有转码/截图相关字段" // @Failure 210 {string} string "请求参数错误
{"message":{"desc":"input format error"}}" // @Failure 211 {string} string "文件大小超过上限
{"message":{"desc":"file too large"}}" // @Failure 423 {string} string "转码参数错误
{"message":{"desc":"转码参数格式错误"}}" // @Failure 424 {string} string "华为云返回error
{"message":{"desc":"七牛云返回错误","error":...}}" // @Router /hw/upload [post] func Upload(srv UploadHTTPServer) func(ctx *gin.Context) { return func(ctx *gin.Context) { var in request.UploadRequest if err := ctx.ShouldBind(&in); err != nil { response.FailWithMessage("input format error", ctx) return } if utils.LimitFileType(in.File.Filename) { response.FailWithMessage("file type forbid", ctx) return } resp, err := srv.Upload(ctx, &in) if err != nil { response.FailWithMessage(err.Error(), ctx) return } response.OkWithData(resp, ctx) } } // @Summary 单图片批量压缩多个格式 // @Description 单张图片批量压缩多个格式 // @Tags 华为云/文件处理 // @Param file formData file false "上传文件" // @Param body body model.CompressImagesRequest true "压缩参数" // @Produce json // @Success 200 {object} model.ImagesCompressResponse "图片压缩结果" // @Failure 210 {string} string "请求参数错误
{"message":{"desc":"input format error"}}" // @Failure 423 {string} string "访问原文件url出错
{"message":{"desc":"访问url出错"}}" // @Failure 425 {string} string "文件处理过程中出错
{"message":{"desc":"image process error","error":...}}" // @Failure 426 {string} string "原文件上传至华为云出错
{"message":{"desc":"error upload to qiniuyun","error":...}}" // @Router /hw/images_compress [post] func ImagesController(srv UploadHTTPServer) func(ctx *gin.Context) { return func(ctx *gin.Context) { var in request.CompressImagesRequest if err := ctx.ShouldBind(&in); err != nil { response.FailWithMessage("input format error", ctx) return } if in.ImageUrl == "" && in.File == nil { response.FailWithMessage("imageUrl/file empty", ctx) return } resp, err := srv.ImagesController(ctx, &in) if err != nil { response.FailWithMessage(err.Error(), ctx) return } response.OkWithData(resp, ctx) } } // @Summary 图片压缩 // @Description 单张图片压缩 // @Tags 华为云/文件处理 // @Param file formData file false "上传文件" // @Param body formData model.CompressImageRequest true "压缩参数" // @Produce json // @Success 200 {object} model.ImageCompressResponse "图片压缩结果" // @Failure 210 {string} string "请求参数错误
{"message":{"desc":"input format error"}}" // @Failure 423 {string} string "访问原文件url出错
{"message":{"desc":"访问url出错"}}" // @Failure 425 {string} string "文件处理过程中出错
{"message":{"desc":"image process error","error":...}}" // @Failure 426 {string} string "原文件上传至七牛云出错
{"message":{"desc":"error upload to qiniuyun","error":...}}" // @Router /hw/image_compress [post] func ImageController(srv UploadHTTPServer) func(ctx *gin.Context) { return func(ctx *gin.Context) { var in request.CompressImageRequest if err := ctx.ShouldBind(&in); err != nil { response.FailWithMessage("input format error", ctx) return } if in.ImageUrl == "" && in.File == nil { response.FailWithMessage("imageUrl/file empty", ctx) return } resp, err := srv.ImageController(ctx, &in) if err != nil { response.FailWithMessage(err.Error(), ctx) return } response.OkWithData(resp, ctx) } }