0007-00000105

问题描述

回调参数callback-var解析与callbackBody赋值出错。

问题原因

您发送的请求中存在用于上传回调的Callback参数和callback-var参数,但是解析callback-var中提供的用户变量,并为Callback参数中的callbackBody赋值时出现错误,导致接口报错。

callbackBody指的是发起回调时请求body的值,例如key=${object}&etag=${etag}&my_var=${x:my_var},支持OSS系统变量、自定义变量和常量。其中自定义变量的支持方式在PutObject和CompleteMultipart中是通过callback-var来传递,在PostObject中则是将各个变量通过表单域来传递。比如上面例子中my_var=${x:my_var}指的就是用callback-var中的自定义变量x:my_var填充callbackBody中的my_var。

问题示例

比如您的请求中callback-var参数解码后如下所示:

{
  "x:var1":"value1",
  "x:var2":"value2"
}

同时请求中Callback参数解码后如下所示:

{
  "callbackUrl":"https://oss-calllback.com/index.html",
  "callbackBody":"size=${size}&my_var=$x:my_var}"
}

上面的Callback参数的callbackBody字段中,第二个键值对my_var=$x:my_var}有误,因为$符号后面少了一个{符号,因此会导致接口报错。

解决方案

请确保请求中callback-var参数是经过Base64编码的合法的JSON字符串,而且其中每一项都是字符串映射到字符串的键值对;并确保Callback参数中的callbackBody字段格式正确无误。您可以参考Callback文档构造请求。此外,您可以通过请求返回的ErrorMessage得到错误原因,比如上面的例子会得到如下的错误信息:

<?xml version="1.0" encoding="UTF-8"?>
<Error>
  	<Code>InvalidArgument</Code>
  	<Message>Left brace must be adjacent to dollar sign.</Message>
  	<RequestId>63F2302A7CF84230346C6D0D</RequestId>
  	<HostId>dinary.oss-cn-hangzhou.aliyuncs.com</HostId>
  	<ArgumentName>ReplaceKeyPrefix</ArgumentName>
  	<ArgumentValue>size=${size}&amp;my_var=$x:my_var}</ArgumentValue>
  	<EC>0007-00000105</EC>
</Error>

其中Message字段说明$符号后面应该紧跟着一个{,您可以根据此类错误信息进行调整。

相关文档