如何避免用户上传同名文件

最近更新时间:2017-08-23 16:40:41

问题概述

标题: 如果避免用户上传同名文件呢(即相同key值的文件)?

以前自己做存储的时候,是自己计算文件 hash,上传时查询如果存在的就不保存了。

现在改用七牛做存储了,看七牛上传返回的有文件 hash,但是不知道七牛的是如何计算出来的。

有没有办法在上传之前就可以知道七牛的存储空间里有没有相同的 hash 已经存在了,这样就不用向七牛上传相同的文件了,还是仍然需要自己实现这种排重计算?

答:

七牛的 hash 算法是公开的。见: https://github.com/qiniu/qetag

算法大体如下:

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

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

  • 其中 Block 是把文件内容切分为 4M 为单位的一个个块,也就是 BlockI = FileContent[I*4M:(I+1)*4M]

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

以上内容是否对您有帮助?
  • Qvm free helper
    Close