当我通过应用服务器获取授权后向oss提交(post)文件时,如果我不设置callback参数,则能上传成功,如果我设置了callback参数,则文件能上传,但回调会报CallbackFailed(404)错误, callbackBody 参数需怎么设置?
fileid=fesdefse-sesd93ld-ueowok-dl3dsld&filename=test 或json字符串格式,我都base64编码后试了下,都是404错误,为什么?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您描述的问题,文件上传成功但回调报CallbackFailed(404)错误,这通常与callbackUrl或callbackBody的设置有关。以下是针对callbackBody参数的详细设置说明和解决方案:
CallbackFailed(404)错误表明OSS在尝试向您的应用服务器发送回调请求时,未能找到对应的资源。callbackBody参数必须是一个非空字符串,并且其内容需要符合callbackBodyType指定的格式(如application/x-www-form-urlencoded或application/json)。callbackBody参数用于定义回调请求的请求体内容,支持以下两种格式:
application/x-www-form-urlencoded 格式callbackBodyType为application/x-www-form-urlencoded,则callbackBody的内容应为键值对形式,例如:
"callbackBody": "fileid=${object}&size=${size}&mimeType=${mimeType}"
${object}、${size}、${mimeType}等是OSS系统变量,表示文件的相关信息。my_var=${x:my_var},其中x:my_var通过callback-var传递。application/json 格式callbackBodyType为application/json,则callbackBody的内容应为JSON字符串,例如:
"callbackBody": "{\"fileid\":\"${object}\",\"size\":${size},\"mimeType\":\"${mimeType}\"}"
\)。假设您希望在回调中传递fileid、size和mimeType,可以参考以下配置:
application/x-www-form-urlencoded{
"callbackUrl": "https://example.com/callback",
"callbackBody": "fileid=${object}&size=${size}&mimeType=${mimeType}",
"callbackBodyType": "application/x-www-form-urlencoded"
}
application/json{
"callbackUrl": "https://example.com/callback",
"callbackBody": "{\"fileid\":\"${object}\",\"size\":${size},\"mimeType\":\"${mimeType}\"}",
"callbackBodyType": "application/json"
}
如果设置了callbackBody后仍然报错,请检查以下几点:
callbackUrl是否有效callbackUrl指向的应用服务器能够正常访问,并且路径正确。callbackUrl包含中文或其他特殊字符,请对其进行URL编码处理。callbackBody是否为空callbackBody不能为空字符串,否则会导致接口报错。callbackBodyType是否匹配callbackBodyType的值为application/x-www-form-urlencoded或application/json,并与callbackBody的内容格式一致。Content-Length头,且响应体大小不能超过1 MB。HTTP/1.1 200 OK,响应体需为合法的JSON格式。结合您的问题描述,建议按照以下步骤操作:
检查callbackUrl
callbackUrl指向的应用服务器路径正确,并且能够正常访问。fileid=fesdefse-sesd93ld-ueowok-dl3dsld),请确保这些参数已正确解析。设置callbackBody
callbackBodyType,并正确设置callbackBody内容。例如:
{
"callbackUrl": "https://example.com/callback",
"callbackBody": "fileid=${object}&size=${size}&mimeType=${mimeType}",
"callbackBodyType": "application/x-www-form-urlencoded"
}
验证应用服务器响应
Content-Length头,且响应体大小不超过1 MB。HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 15
{"status":"success"}
通过以上步骤,您可以正确设置callbackBody参数,并解决CallbackFailed(404)错误。如果问题仍未解决,请进一步检查callbackUrl的网络连通性以及应用服务器的逻辑实现。