开发者社区> 问答> 正文

阿里云OSS分段上传后的文件返回的总etag怎么通过本地文件模拟计算得到

公司在做一个基于oss的省流量的工具,要通过对比oss上的etag中的md5和本地文件的md5来判断文件是否更新,更新则下载。现在发现从服务器上得到的小文件的etag和本地文件的md5一致,可是大文件因为是分段上传的发现得到的etag没法和本地的md5相同,谁知道怎么比,或者怎么模拟出服务器分段上传后etag的计算。


展开
收起
dgglance 2016-01-02 23:13:34 13570 0
2 条回答
写回答
取消 提交回答
  • 回 2楼scorpion的帖子
    如果上传者不是我,而且我仅知道上传时候分了100片,但不知道每片的大小怎么办
    2016-01-04 09:29:51
    赞同 展开评论 打赏
  • 函数计算研发经理。2010年加入阿里云,参与了阿里云飞天分布式系统的研发,深度参与了阿里云系统研发和产品迭代的全过程。对大规模分布式计算,大规模数据存储和处理有非常深入的理解。现为阿里云函数计算产品研发负责人,致力于构建下一代弹性、高可用的无服务器计算平台。
    您好,

    如果您要通过对比md5来判断文件是否更新,那么分片上传后,oss对象的etag确实会和本地md5不同。您可以采用这样的做法:

    1. 将该文件分片上传时,假设分100片,您计算每一片的crc64,并将所有分片的crc64值(在这个例子中,一共100个crc64)通过user custorm meta记录到oss object meta中。

    2. crc有一个连接的特性(Concatenation),使得您可以快速将100个分片的crc值组合起来,等于对整个文件计算的crc值。这个值可以和您针对本地整个文件计算的值进行对比。具体可参考下面项目中的文档和例子:
    https://code.google.com/p/crcutil/

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

    Re:回 2楼scorpion的帖子
    引用第3楼dgglance于2016-01-04 09:29发表的 回 2楼scorpion的帖子 :
    如果上传者不是我,而且我仅知道上传时候分了100片,但不知道每片的大小怎么办 [url=http://bbs.aliyun.com/job.php?action=topost&tid=269585&pid=749182][/url]


    您需要让上传者使用您提供的API上传文件,您的API在上传时就已经计算了每个分片的crc等相关信息。
    2016-01-03 20:25:04
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
OSS运维进阶实战手册 立即下载
《OSS运维基础实战手册》 立即下载
OSS运维基础实战手册 立即下载