阿里云oss存储,怎么判断已经有MD5相同的文件,不再上传
发布于 6 年前 作者 yuquanH 10671 次浏览 来自 问答

阿里云oss存储,怎么判断已经有MD5相同的文件,不再上传

14 回复

上传的文件名里带md5值,上传文件的时候MD5下再请求是否有这个文件就可以。

可以借鉴七牛云的hash算法:https://github.com/qiniu/qetag

@Asher-Tan 如果已经有几十万个文件,去请求每一个文件的信息判断是不合适的,可以以hash命名文件,或者借助数据库

@reezon hash值不需要计算,你上传文件或请求文件列表的时候会返回etag,就是哈希值

@Asher-Tan listobject的上限是1000个,需要看后续的需要递归,类似分页

@fuxingZhang 我把场景想象成了前端静态文件的上传。一般静态文件上传我是直接请求判断的,如果做资源文件的存储这样肯定是不好的。

直接hash会撞

我采用hash命名

文件多了md5容易重名的吧,我用sha1,oss不是有head请求吗?head一下不就知道文件存不存在了。

来自✨ Node.js开源项目精选

@fuxingZhang 大牛您好 弱弱到问一句 因为要用hash命名 所以在上传这个文件之前 是否需要先获取 上传文件的MD5值 七牛是可以把key 留空的 如为空 七牛就自动为hash命名啦

@wlijie 1、可以使用node自带的crypto模块计算md5,然后指定上传的key为md5上传。 2、七牛的话,你就可以直接上传了,不用计算 3、(秒传功能:通过key获取文件信息,如果存在,就直接提示上传成功,不存在的话再上传文件)

如果你是用 node / java, 在 服务器层计算文件 (如 md5), 然后加上后缀成为key就可以了 (node 下用 crypto). foo.ext -> some_role_prefix_${md5}.ext 如果是 sts 模式下前端浏览器也可以用类似方法 (FileReader), 本身 oss 前端 sdk 好像没提供. 但浏览器计算性能嘛…跑几分钟还不如 Linux 两三秒的计算(不讨论这些)


上传的时候 list 一下是否存在对应文件路径. 然后判断是否存在文件, 存在即无需上传

直接使用MD5命名啊会取代原图,md5一样基本上是同一个文件 ;上传不花钱的,读取才花钱,所以不考虑先判断存不存在才上传。

回到顶部