bindbox-game/internal/api/common/upload_wangeditor.go
邹方成 45815bfb7d chore: 清理无用文件与优化代码结构
refactor(utils): 修复密码哈希比较逻辑错误
feat(user): 新增按状态筛选优惠券接口
docs: 添加虚拟发货与任务中心相关文档
fix(wechat): 修正Code2Session上下文传递问题
test: 补充订单折扣与积分转换测试用例
build: 更新配置文件与构建脚本
style: 清理多余的空行与注释
2025-12-18 17:35:55 +08:00

76 lines
2.4 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package common
import (
"net/http"
"strings"
"bindbox-game/internal/code"
"bindbox-game/internal/pkg/core"
)
// @Summary WangEditor图片上传
// @Description 适配 WangEditor 的图片上传接口
// @Tags Common
// @Accept multipart/form-data
// @Produce json
// @Param file formData file true "图片文件"
// @Success 200 {object} map[string]any "上传成功"
// @Failure 400 {object} map[string]any "上传失败"
// @Router /common/upload/wangeditor [post]
func (h *handler) UploadWangEditorImage() core.HandlerFunc {
return func(ctx core.Context) {
fh, err := ctx.FormFile("file")
if err != nil {
ctx.AbortWithError(core.Error(http.StatusBadRequest, code.ParamBindError, "缺少文件"))
return
}
// 限制文件大小不超过 5MB
if fh.Size > 5*1024*1024 {
ctx.AbortWithError(core.Error(http.StatusBadRequest, code.UploadError, "图片大小不能超过5MB"))
return
}
f, err := fh.Open()
if err != nil {
ctx.AbortWithError(core.Error(http.StatusBadRequest, code.UploadError, err.Error()))
return
}
defer f.Close()
ct := fh.Header.Get("Content-Type")
if ct == "" {
ct = "application/octet-stream"
}
// 校验图片类型
allowed := map[string]struct{}{
"image/jpeg": {},
"image/jpg": {},
"image/png": {},
"image/gif": {},
"image/webp": {},
"image/bmp": {},
}
if ct == "application/octet-stream" {
// 一些浏览器可能未设置 content-type允许继续服务端会按扩展名纠正
} else if _, ok := allowed[strings.ToLower(ct)]; !ok {
if !strings.HasPrefix(strings.ToLower(ct), "image/") {
ctx.AbortWithError(core.Error(http.StatusBadRequest, code.UploadError, "仅支持上传图片类型"))
return
}
}
url, err := h.svc.UploadImage(ctx.RequestContext(), fh.Filename, f, ct)
if err != nil {
ctx.AbortWithError(core.Error(http.StatusBadRequest, code.UploadError, err.Error()))
return
}
resp := map[string]any{
"errno": 0,
"data": map[string]string{
"url": url,
},
}
ctx.Payload(resp)
}
}