发送的body如下:
<?xml version="1.0" encoding="UTF-8"?><Delete><Quiet>false</Quiet><Object><Key>1</Key></Object><Object><Key>2</Key></Object><Object><Key>3</Key></Object><Object><Key>4</Key></Object><Object><Key>5</Key></Object></Delete>
oss返回报文如下:
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>InvalidDigest</Code>
<Message>The Content-MD5 you specified was invalid.</Message>
<Content-MD5>84b76f59781587963a7f95a1d461b01e</Content-MD5>
<RequestId>52C1A3ED8FA7C7844392A252</RequestId>
<HostId>transfile.oss-cn-hangzhou.aliyuncs.com</HostId>
</Error>
发送的md5为:84b76f59781587963a7f95a1d461b01e
生成代码如下:
if (is_array($object)) {
$xml = '<?xml version="1.0" encoding="UTF-8"?><Delete><Quiet>false</Quiet>%s</Delete>';
$template = '<Object><Key>%s</Key></Object>';
$tempstr = '';
foreach ($object as $obj) {
$tempstr .= sprintf($template,$obj);
}
$xml = sprintf($xml,$tempstr);
$header['content-length'] = strlen($xml);
$header['content-md5'] = md5($xml);
$opts['content'] = $xml;
}
-------------------------
-------------------------
lz好,已经安排技术人员联系您说明此问题。
这个md5值是需要base64编码的,base64编码的输入需要是md5编码后原始的输出,一般的md5工具输出其实是经过ascii再编码的,比如 1经过md5编码在内存里存储的一个字节是 '11111111' ,md5工具为了人阅读方便就编码成十六进制的ff,并且以字符串的形式输出“FF”,
如果把这个“FF”作为base64的输入进行第二次编码是不正确的,正确的应该是把内存里原始的'11111111'作为base64的输入进行编码。还请您测试,谢谢!
再次感谢亲的支持!预祝您新年快乐哦~~
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。