如何避免用户上传相同的文件

新手上路,请多包涵

请教一个问题: 如果避免用户上传相同的文件呢?以前自己做存储的时候,是自己计算文件hash,上传时查询如果存在的就不保存了。现在改用七牛做存储了,看七牛上传返回的有文件hash,但是不知道七牛的是如何计算出来的。有没有办法在上传之前就可以知道七牛的bucket里有没有相同的hash已经存在了,这样就不用向七牛上传相同的文件了,还是仍然需要自己实现这种排重计算

阅读 11.9k
2 个回答
  1. 七牛的 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]
  2. 上传到七牛云存储的时候,key 是可选的。如果你不指定 key,则自动以 hash 值作为 key,此时自动带了消重能力。两个用户上传相同的文件,最终的 key 是一样的。

寻求js版本qetag计算代码,非nodejs。

因为发现js没有buffer处理方法。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
七牛云问答
子站问答
访问
宣传栏