开发者社区> 问答> 正文

为何会如此提示?批量删除。

发送的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;
}




展开
收起
cevin 2013-12-31 00:49:24 9114 0
3 条回答
写回答
取消 提交回答
  • Re为何会如此提示?批量删除。
    lz这个应该是Delete Multiple Objects吧,这个请求的content-MD5 header需要把http报文的md5计算出来然后再经过base64编码的,详细lz可以参考oss api手册的5.4.3小节
    2014-01-02 17:44:19
    赞同 展开评论 打赏
  • 回2楼cloudservice的帖子
    好像不对吧。。。。。


    你说的那是Auth头里的md5吧。我这可是发送的content-md5不是签名时候的md5啊

    -------------------------

    回4楼慕里的帖子
    上传文件的md5呢?
    2014-01-01 00:32:33
    赞同 展开评论 打赏
  • 分享阿里云支持与服务团队最佳实践、经典案例与故障排查。
    回 楼主(cevin) 的帖子
    lz好,问题正在查询,有结果会马上回复您~

    -------------------------

    lz好,已经安排技术人员联系您说明此问题。
    这个md5值是需要base64编码的,base64编码的输入需要是md5编码后原始的输出,一般的md5工具输出其实是经过ascii再编码的,比如 1经过md5编码在内存里存储的一个字节是 '11111111' ,md5工具为了人阅读方便就编码成十六进制的ff,并且以字符串的形式输出“FF”,
    如果把这个“FF”作为base64的输入进行第二次编码是不正确的,正确的应该是把内存里原始的'11111111'作为base64的输入进行编码。还请您测试,谢谢!

    再次感谢亲的支持!预祝您新年快乐哦~~

    2013-12-31 12:51:53
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载