开发者社区> 问答> 正文

CompleteMultipartUpload返回的etag值与原文件的md5值不同

用MultipartUpload的方式上传文件后,最终的文件md5值与原文件的md5值不同。返回的etag值在最后面还多了个-[number], number应该表示的是part的数目。(在OSS的API文档中可以看到)
可以确定的是整个上传过程没有错误。因为适用CopyObject复制那个用multipart上传的文件后目标文件的md5值也是与之不同。

展开
收起
weilin 2012-08-24 16:56:42 16975 0
9 条回答
写回答
取消 提交回答
  • Re:ReCompleteMultipartUpload返回的etag值与原文件的md5值不同
    引用第1楼wood23于2012-08-24 23:38发表的 ReCompleteMultipartUpload返回的etag值与原文件的md5值不同 :
    OSS 的API文档中没有提到ETAG等于MD5,建议在上传的时候在object的自定义header,以x-oss-开头的,写入md5值,下载的时候对比下内容的md5就可以。

    个人感觉 二楼用户的答复是正解。
    2014-10-28 21:41:18
    赞同 展开评论 打赏
  • 回楼主weilin的帖子
    如果是multipart方式上传文件的,etag 计算方式是 :
              首先分别计算每片part的md5,例如你上传的文件 part1, part2, part3..... partn
              计算出每一块的part 的md5为  etag1,   etag2, etag3..... etagn
              etag = etag1 + etag2 + etag3 + .... + etagn
              etag = md5(etag) + ''-" + n ,  这个n 是你实际complete 的块数。
    2014-10-28 10:27:35
    赞同 展开评论 打赏
  • ReCompleteMultipartUpload返回的etag值与原文件的md5值不同
    我也是,真他NND想骂娘,阿里云OSS的开发者们不能出来冒个泡么?咋解决?

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

    ReCompleteMultipartUpload返回的etag值与原文件的md5值不同
    OSS 的API文档中没有提到ETAG等于MD5,建议在上传的时候在object的自定义header,以x-oss-开头的,写入md5值,下载的时候对比下内容的md5就可以。

    请问老大们,能对这个做进一步解释么?如何加HEADER?
    2014-10-27 23:05:55
    赞同 展开评论 打赏
  • ReCompleteMultipartUpload返回的etag值与原文件的md5值不同
    楼主问题解决没?
    2013-09-11 14:00:35
    赞同 展开评论 打赏
  • ReCompleteMultipartUpload返回的etag值与原文件的md5值不同
    我今天也发现了这个问题,之前传了几个小文件,etag和MD5是一样的。分块上传的就很奇怪。




    在OSS群里问没人回答,不知道etag究竟是个什么算法,如果不知道他的算法,那么就没法确定上传后的文件的正确性啊
    2012-09-21 12:45:03
    赞同 展开评论 打赏
  • ReCompleteMultipartUpload返回的etag值与原文件的md5值不同
    楼主是不是也是自己在实现这些底层的访问接口函数?我也正做到multipart-upload这部分,感觉有些难点不是很好处理,希望有经验的达人出来分享下自己的心得体会呢,谢谢。
    2012-09-13 09:35:21
    赞同 展开评论 打赏
  • ReCompleteMultipartUpload返回的etag值与原文件的md5值不同
    看的有点头大了
    2012-08-27 20:41:12
    赞同 展开评论 打赏
  • ReCompleteMultipartUpload返回的etag值与原文件的md5值不同
    OSS的API文档有这样一句话:Put Object 请求处理成功后,OSS 会将收到文件的 MD5 值放在返回给用户的请求头“ETag”中,以便用户检查 OSS 上的数据和要上传的数据内容一致。可能这句话只对PutObject请求有效,而不包括MultipartUpload请求。
    另外,GetObject的时候可以传if-match参数,如果传入期望的 ETag 和 object 的 ETag 匹配,则正常传输文件。如果是PutObject上传的文件,我可以直接算文件的md5得到ETag值。但如果是MultipartUpload上传的文件,如果之前没有保存下CompleteMultipartUpload时的ETag,我就不能知道if-match该传什么参数。
    自定义header可以解决这个问题,但我觉得如果还要自定义一个header来保存md5,那原本的ETAG字段是不是可有可无呢?
    最后,我觉得,由于MultiparUpload返回的etag值不是文件的md5值,会导致一些操作(例如GetObject if-match时下载)处理起来比较繁琐。
    谢谢楼上的回复。

    2012-08-25 09:56:36
    赞同 展开评论 打赏
  • ReCompleteMultipartUpload返回的etag值与原文件的md5值不同
    OSS 的API文档中没有提到ETAG等于MD5,建议在上传的时候在object的自定义header,以x-oss-开头的,写入md5值,下载的时候对比下内容的md5就可以。
    2012-08-24 23:38:38
    赞同 展开评论 打赏
滑动查看更多
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

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