开发者社区 问答 正文

oss web直传时 回调失败

当我通过应用服务器获取授权后向oss提交(post)文件时,如果我不设置callback参数,则能上传成功,如果我设置了callback参数,则文件能上传,但回调会报CallbackFailed(404)错误, callbackBody 参数需怎么设置?

fileid=fesdefse-sesd93ld-ueowok-dl3dsld&filename=test 或json字符串格式,我都base64编码后试了下,都是404错误,为什么?

展开
收起
teetaa 2016-03-17 14:41:11 7101 分享 版权
阿里云 AI 助理回答

根据您描述的问题,文件上传成功但回调报CallbackFailed(404)错误,这通常与callbackUrlcallbackBody的设置有关。以下是针对callbackBody参数的详细设置说明和解决方案:


1. 问题分析

  • CallbackFailed(404)错误表明OSS在尝试向您的应用服务器发送回调请求时,未能找到对应的资源。
  • 根据知识库资料,callbackBody参数必须是一个非空字符串,并且其内容需要符合callbackBodyType指定的格式(如application/x-www-form-urlencodedapplication/json)。

2. callbackBody 参数的正确设置

callbackBody参数用于定义回调请求的请求体内容,支持以下两种格式:

(1)application/x-www-form-urlencoded 格式

  • 如果callbackBodyTypeapplication/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传递。

(2)application/json 格式

  • 如果callbackBodyTypeapplication/json,则callbackBody的内容应为JSON字符串,例如:
    "callbackBody": "{\"fileid\":\"${object}\",\"size\":${size},\"mimeType\":\"${mimeType}\"}"
    
    • 注意:JSON字符串中的双引号需要进行转义(使用\)。

3. 示例配置

假设您希望在回调中传递fileidsizemimeType,可以参考以下配置:

示例 1:application/x-www-form-urlencoded

{
  "callbackUrl": "https://example.com/callback",
  "callbackBody": "fileid=${object}&size=${size}&mimeType=${mimeType}",
  "callbackBodyType": "application/x-www-form-urlencoded"
}

示例 2:application/json

{
  "callbackUrl": "https://example.com/callback",
  "callbackBody": "{\"fileid\":\"${object}\",\"size\":${size},\"mimeType\":\"${mimeType}\"}",
  "callbackBodyType": "application/json"
}

4. 常见问题排查

如果设置了callbackBody后仍然报错,请检查以下几点:

(1)callbackUrl是否有效

  • 确保callbackUrl指向的应用服务器能够正常访问,并且路径正确。
  • 如果callbackUrl包含中文或其他特殊字符,请对其进行URL编码处理。

(2)callbackBody是否为空

  • callbackBody不能为空字符串,否则会导致接口报错。

(3)callbackBodyType是否匹配

  • 确保callbackBodyType的值为application/x-www-form-urlencodedapplication/json,并与callbackBody的内容格式一致。

(4)应用服务器响应是否符合要求

  • 应用服务器返回的响应必须包含Content-Length头,且响应体大小不能超过1 MB。
  • 响应状态码应为HTTP/1.1 200 OK,响应体需为合法的JSON格式。

5. 具体解决方案

结合您的问题描述,建议按照以下步骤操作:

  1. 检查callbackUrl

    • 确保callbackUrl指向的应用服务器路径正确,并且能够正常访问。
    • 如果路径中包含动态参数(如fileid=fesdefse-sesd93ld-ueowok-dl3dsld),请确保这些参数已正确解析。
  2. 设置callbackBody

    • 根据需求选择合适的callbackBodyType,并正确设置callbackBody内容。例如:
      {
      "callbackUrl": "https://example.com/callback",
      "callbackBody": "fileid=${object}&size=${size}&mimeType=${mimeType}",
      "callbackBodyType": "application/x-www-form-urlencoded"
      }
      
  3. 验证应用服务器响应

    • 确保应用服务器返回的响应包含Content-Length头,且响应体大小不超过1 MB。
    • 示例响应:
      HTTP/1.1 200 OK
      Content-Type: application/json
      Content-Length: 15
      {"status":"success"}
      

6. 总结

通过以上步骤,您可以正确设置callbackBody参数,并解决CallbackFailed(404)错误。如果问题仍未解决,请进一步检查callbackUrl的网络连通性以及应用服务器的逻辑实现。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答