S3 上存储文件,如何并且保证文件不重复存储?

2013-04-15 15:18:15 +08:00
 ine181x
应用在 S3 上存储文件的时候,需要给文件命名,或者使用文件本身的名字。但是文件本身的名字会重复,可能覆盖原有的同名文件。

我现在的做法是,用文件的 md5 来作为文件名 + 后缀.但是 md5 理论上也是会重复的,但是如果用 md5_timestamp 这种命名方法,如果后来又上传了同样的文件,就会导致重复上传的问题。想知道大家在云平台存储文件的时候,是怎么处理这种问题的?
8375 次点击
所在节点    Amazon Web Services
20 条回复
ritksm
2013-04-15 15:22:09 +08:00
对文件内容做hash不就好了。。。。md5位数不够就sha512总够了吧。。。
justfindu
2013-04-15 15:22:56 +08:00
话说文件的md5相同了 那不就是同一个文件 何必要存两次?
swulling
2013-04-15 15:24:32 +08:00
总有很多人蛋疼的考虑md5碰撞了怎么办。。。
huihen
2013-04-15 15:44:37 +08:00
md5_文件大小做文件名如何
c0878
2013-04-15 16:00:20 +08:00
MD5也会重复??
ashchan
2013-04-15 16:27:02 +08:00
同三楼 @swulling ,理论上来说理论上的碰撞可以忽略。
feiandxs
2013-04-15 16:32:57 +08:00
@swulling 太多的人白菜白粉心...
okidogi
2013-04-15 16:39:37 +08:00
这是一个牛刀:uuid (Universally Unique IDentifier)。http://tools.ietf.org/html/rfc4122.html

具体得看你的应用场景。
clino
2013-04-15 17:04:07 +08:00
用 sha1_文件字节数 这样我觉得是不是就可以了
Winny
2013-04-15 20:47:09 +08:00
md5确实会产生碰撞,实际项目中遇见过
gDD
2013-04-15 21:56:43 +08:00
用 crc_md5_sha 作为文件名呢?
j
2013-04-16 00:45:41 +08:00
本地用的是mongodb gridfs生成文件名,mongodb生成的ObjectId本身带时间戳信息,所以不会重名。
mifan
2013-04-16 02:35:26 +08:00
md5_filesize.ext 这个碰撞的几率就更小了
lightening
2013-04-16 04:25:56 +08:00
用sha-1的话,160bit,如果每秒保存一个文件,那么平均大约需要2^100倍的宇宙的年龄这么长的时间,会出现一次碰撞。楼主的运气不会有这么差的吧?
lightening
2013-04-16 04:28:46 +08:00
说实话,您碰到机房停电、好多硬盘一起挂掉、网络瘫痪、服务器被偷、机房被海啸淹了、彗星撞地球这种事的概率全都比sha1碰撞高无数倍。
FanError
2013-04-16 07:38:30 +08:00
@Winny 好奇,那2个文件能不能共享出来让大家看看。:P
Winny
2013-04-17 15:12:28 +08:00
@FanError 没有文件,而且是别组的项目,只是在研发会议上报告过这个问题。(url的md5 hash。当时用作缓存key。)
lqs
2013-04-17 15:29:55 +08:00
lookhi
2013-04-17 15:51:22 +08:00
@lqs 求 大小相同 而且 MD5也一样的图片文件
janxin
2013-04-17 17:30:45 +08:00
md5+sha1就行了,不过缺点是key会比较长

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/65941

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX