2.2 KiB
2.2 KiB
快速修复:请求体为空问题
问题
POST /platform/qiniu/save 400
{"code": 400, "msg": "参数解析失败: 请求体为空"}
快速修复步骤
1. 重启后端服务(已修改配置)
systemctl restart go-api
2. 查看服务状态
systemctl status go-api
预期输出:
● go-api.service - Go API Server
Loaded: loaded
Active: active (running)
3. 查看日志
tail -f /www/wwwroot/api.yunzer.cn/go.log
4. 测试上传
- 登录系统
- 进入软件升级页面
- 上传一个文件
5. 观察日志输出
应该看到:
SaveFileRecord 请求体长度: xxx
SaveFileRecord 请求体内容: {"key":"...","hash":"...","size":...}
已修改的文件
✅ go/main.go - 添加 beego.BConfig.CopyRequestBody = true
✅ go/conf/app.conf - 添加 copyrequestbody = true
✅ go/controllers/qiniu_upload.go - 添加调试日志
如果还是失败
检查 1: 服务是否重启成功
systemctl status go-api
如果失败,查看错误:
journalctl -u go-api -n 50
检查 2: 配置是否生效
查看日志中是否有请求体内容输出。如果没有,说明配置未生效。
检查 3: 前端请求是否正确
打开浏览器开发者工具,查看 Network 标签:
- 请求方法:POST
- Content-Type: application/json
- 请求体:应该有 JSON 数据
完整上传流程
1. 前端上传文件到七牛云 ✓
↓
2. 七牛云返回文件信息 ✓
{
"key": "2026/04/09/xxx.exe",
"hash": "xxx",
"size": 60742452
}
↓
3. 前端调用 /platform/qiniu/save ← 这里失败了
POST /platform/qiniu/save
Body: {
"key": "...",
"hash": "...",
"size": ...,
"name": "...",
"mimeType": "...",
"cate": 0
}
↓
4. 后端保存到数据库 ← 修复后应该成功
↓
5. 返回文件 URL
修复原理
Beego 框架默认不复制请求体,需要启用 CopyRequestBody:
// 修复前
c.Ctx.Input.RequestBody // 空的
// 修复后(启用 CopyRequestBody)
c.Ctx.Input.RequestBody // 包含请求体数据
更新时间
2026-04-09