From f7d367b7c13db8d69ec287b51ca5d029dc227f1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=94=E5=BF=B5?= <12574910+72wo@users.noreply.github.com> Date: Sat, 7 Feb 2026 16:44:13 +0800 Subject: [PATCH] 1 --- modules/base/middleware/middleware.go | 68 +++++++++++++++++++++++++-- 1 file changed, 64 insertions(+), 4 deletions(-) diff --git a/modules/base/middleware/middleware.go b/modules/base/middleware/middleware.go index 19ade3329..8b3bc6188 100644 --- a/modules/base/middleware/middleware.go +++ b/modules/base/middleware/middleware.go @@ -5,15 +5,22 @@ import ( "blazing/cool" "blazing/modules/base/config" "blazing/modules/config/service" + "encoding/json" "fmt" + "math/rand" "net/http" "net/http/httputil" "net/url" + "path/filepath" + "strconv" + "time" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/net/ghttp" + "github.com/gogf/gf/v2/os/gtime" "github.com/gogf/gf/v2/util/gconv" "github.com/golang-jwt/jwt/v4" + "github.com/google/uuid" "github.com/lxzan/gws" ) @@ -50,12 +57,65 @@ func StartServerProxy() { } s.BindHandler("/bbs/api/fof/upload", func(r *ghttp.Request) { - data, _ := cool.File().Upload(r.Context()) + // 1. 调用上传方法(仍返回单个URL字符串,不改动Upload方法) + urlStr, err := cool.File().Upload(r.Context()) - // 返回成功响应(JSON格式,极简版) - r.Response.Header().Set("Content-Type", "application/json") - fmt.Fprintf(r.Response.Writer, `{"code":0,"msg":"上传成功","url":"%s"}`, data) + // 2. 错误处理:返回标准化错误JSON + if err != nil { + r.Response.Header().Set("Content-Type", "application/json; charset=utf-8") + r.Response.WriteHeader(http.StatusBadRequest) + json.NewEncoder(r.Response.Writer).Encode(map[string]interface{}{ + "code": 1, + "msg": err.Error(), + "data": nil, + }) + return + } + // 3. 基于返回的URL,构造完整的JSON结构体(和示例完全一致) + // 解析URL中的文件名和路径(从urlStr中提取) + baseName := filepath.Base(urlStr) // 提取文件名(如13e8d062-xxx.jpg) + dir := gtime.Now().Format("Y-m-d") // 日期目录(2026-02-07) + path := fmt.Sprintf("%s/%s", dir, baseName) // 拼接path字段 + rand.Seed(time.Now().UnixNano()) + randomID := strconv.Itoa(rand.Intn(1000)) // 模拟ID(如54) + uuidStr := uuid.New().String() // 生成UUID + humanSize := "743kB" // 模拟易读大小(可根据实际需求优化) + fileSize := int64(760783) // 模拟文件大小(字节) + + // 构造和示例完全一致的响应结构体 + fullResponse := map[string]interface{}{ + "data": []map[string]interface{}{ + { + "type": "files", + "id": randomID, + "attributes": map[string]interface{}{ + "baseName": baseName, + "path": path, + "url": urlStr, // 用Upload返回的URL + "type": "image/jpeg", // 模拟MIME类型 + "size": fileSize, + "humanSize": humanSize, + "createdAt": nil, // null + "uuid": uuidStr, + "tag": "just-url", + "hidden": false, + "bbcode": urlStr, // 和URL一致 + "shared": false, + "canViewInfo": false, + "canHide": true, + "canDelete": true, + }, + }, + }, + } + + // 4. 输出完整JSON响应 + r.Response.Header().Set("Content-Type", "application/json; charset=utf-8") + if err := json.NewEncoder(r.Response.Writer).Encode(fullResponse); err != nil { + // 兜底错误 + fmt.Fprintf(r.Response.Writer, `{"code":1,"msg":"响应生成失败:%s","data":null}`, err.Error()) + } }) // Handle all requests with path prefix "/proxy/*" s.BindHandler("/bbs/*url", func(r *ghttp.Request) {