更新时间:2026-07-10 GMT+08:00
如何定位上传回调失败的问题?
工作原理
OBS 上传回调(Callback)允许在对象上传成功后,OBS 服务端自动向指定的回调 URL 发起 HTTP 请求。SDK 支持以下操作的上传回调:
- PutObject/ PutFile
- CompleteMultipartUpload(合并段完成时)
SDK 通过 WithCallbackHeader 扩展参数将回调配置写入 x-obs-callback 请求头,OBS 收到后在上传完成时发起回调。
排查步骤
- 通过 HTTP 状态码确认回调是否失败。
场景
返回状态码
说明
上传成功 + 回调成功
200
正常,可读取 CallbackBody。
上传成功 + 回调失败
203
对象已存储,但回调服务器返回非 200。
上传失败
err != nil
上传本身失败,回调不会触发。
当状态码为 203 时,对象已成功上传到 OBS,但回调失败,需按以下步骤继续排查。
- 检查回调 URL 是否可达。回调失败最常见的原因是 OBS 服务端无法访问回调 URL,请确认:
- URL 必须是公网可访问的 HTTP/HTTPS 地址。
- 回调服务器必须返回 200 状态码,否则 OBS 认为回调失败。
验证方法: 使用 curl 从外部网络模拟回调请求。
curl -X POST http://your-server.com/callback \ -H "Content-Type: application/json" \ -d '{"bucket":"test","key":"obj","etag":"abc"}' \ -v如果 curl 无法连通,说明回调服务不可达,需检查网络配置、防火墙规则或服务是否正常运行。
- 检查 CallbackUrl 是否经过 URL 编码。如果 URL 中包含特殊字符(如中文、空格、&、= 等),必须先进行 URL 编码,否则 OBS 服务端可能无法正确解析回调地址,导致回调失败。
- 检查回调服务器端的日志。如果回调 URL 可达但仍然失败,需查看回调服务器端的日志,常见问题包括:
- 未正确处理数据: 服务端解析回调请求体时报错,例如未识别 $(bucket) 等模板变量替换后的格式。
- 未返回响应体: 服务端处理成功但未返回响应内容,或返回了非 200 状态码。
- 网络超时: 服务端处理耗时过长,导致 OBS 侧回调超时。
父主题: 常见问题(Go SDK)