当前位置:首页 > 宅科技 > 正文

避免重复上传下载

晚上在七牛云储存开发者平台上绑定了http://cdn.muruoxi.pw这个节点域名来给博客的静态资源做加速,结果被通知还需要24小时的cname记录生效时间。

无聊的情况下看到七牛开发平台有篇对“如何避免上传相同的文件”的文章,转载如下:

 

七牛的 hash/etag 算法是公开的。算法大体如下:

  • 如果你能够确认文件 <= 4M,那么
    hash = UrlsafeBase64([0x16, sha1(FileContent)])。

     

    也就是,文件的内容的sha1值(20个字节),前面加一个byte(值为0x16),构成 21 字节的二进制数据,然后对这 21 字节的数据做 urlsafe 的 base64 编码。

  • 如果文件 > 4M,则
    hash = UrlsafeBase64([0x96, sha1([sha1(Block1), sha1(Block2), ...])])

     

    ,其中 Block 是把文件内容切分为 4M 为单位的一个个块,也就是

    BlockI = FileContent[I*4M:(I+1)*4M]。

     

上传到七牛云存储的时候,key 是可选的。如果你不指定 key,则自动以 hash 值作为 key,此时自动带了消重能力。两个用户上传相同的文件,最终的 key 是一样的。

为何在 sha1 值前面加一个byte的标记位(0x16或0x96)?

  • 0x16 = 22,而 2^22 = 4M。所以前面的 0x16 其实是文件按 4M 分块的意思。
  • 0x96 = 0x80 | 0x16。其中的 0x80 表示这个文件是大文件(有多个分块),hash 值也经过了2重的 sha1 计算。

额,保留下以后参考,省的搞个空间被人乱上传……


QQ群号:543825203[电脑问题互助交流]

文章标题:避免重复上传下载
本文作者:慕若曦
发表日期:2016-01-27 09:23 星期三    首发于    暮若夕
本文固定链接: https://www.muruoxi.com/117.html
 
文章标签:
上一篇: 下一篇:

3 条评论

评论加载中...
  1. 板凳
    装逼达人   

    七牛现在 越来越不好用了

    2016年2月5日 下午8:11 评论
    • 慕若曦   

      还行吧,目测梦月酱也是七牛。

      2016年2月5日 下午9:21 评论
  2. 沙发
    姜辰   

    付费大法好~~~

    2016年2月12日 下午5:51 评论

发表评论

╮( ̄▽ ̄)╭ |  (= ̄ω ̄=) |  (>﹏<) |  Σ( ° △ °|||)︴ |  Σ(っ °Д °;)っ |  X﹏X |  (╯-_-)╯╧╧

小提示:Ctrl+Enter快速提交助您一臂之力~
十年之约
加载中……