|
下午发了一个,本来是200Jb的,结果怎么变成了5JB了,
现在看来只能发200的了,管理可以把我那个删了吧
计算文件上传前的hash值,用来校验文件是否上传完整
这个帖子是牛牛的上传源码,上传成功就返回hash
http://bbs.125.la/forum.php?mod= ... hlight=%C6%DF%C5%A3
下面是算法
- <font face="微软雅黑" size="3">七牛的 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]。
- 为何需要公开 hash/etag 算法?这个和 “消重” 问题有关,详细见:
- http://kb.qiniu.com/53tubk96
- http://segmentfault.com/q/1010000000315810
- 为何在 sha1 值前面加一个byte的标记位(0x16或0x96)?
- 0x16 = 22,而 2^22 = 4M。所以前面的 0x16 其实是文件按 4M 分块的意思。
- 0x96 = 0x80 | 0x16。其中的 0x80 表示这个文件是大文件(有多个分块),hash 值也经过了2重的 sha1 计算。</font>
复制代码
|
|