V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ine181x
V2EX  ›  Amazon Web Services

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

  •  
  •   ine181x · 2013-04-15 15:18:15 +08:00 · 8697 次点击
    这是一个创建于 4240 天前的主题,其中的信息可能已经有所发展或是发生改变。
    应用在 S3 上存储文件的时候,需要给文件命名,或者使用文件本身的名字。但是文件本身的名字会重复,可能覆盖原有的同名文件。

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

    具体得看你的应用场景。
    clino
        9
    clino  
       2013-04-15 17:04:07 +08:00
    用 sha1_文件字节数 这样我觉得是不是就可以了
    Winny
        10
    Winny  
       2013-04-15 20:47:09 +08:00
    md5确实会产生碰撞,实际项目中遇见过
    gDD
        11
    gDD  
       2013-04-15 21:56:43 +08:00   ❤️ 1
    用 crc_md5_sha 作为文件名呢?
    j
        12
    j  
       2013-04-16 00:45:41 +08:00
    本地用的是mongodb gridfs生成文件名,mongodb生成的ObjectId本身带时间戳信息,所以不会重名。
    mifan
        13
    mifan  
       2013-04-16 02:35:26 +08:00
    md5_filesize.ext 这个碰撞的几率就更小了
    lightening
        14
    lightening  
       2013-04-16 04:25:56 +08:00
    用sha-1的话,160bit,如果每秒保存一个文件,那么平均大约需要2^100倍的宇宙的年龄这么长的时间,会出现一次碰撞。楼主的运气不会有这么差的吧?
    lightening
        15
    lightening  
       2013-04-16 04:28:46 +08:00
    说实话,您碰到机房停电、好多硬盘一起挂掉、网络瘫痪、服务器被偷、机房被海啸淹了、彗星撞地球这种事的概率全都比sha1碰撞高无数倍。
    FanError
        16
    FanError  
       2013-04-16 07:38:30 +08:00
    @Winny 好奇,那2个文件能不能共享出来让大家看看。:P
    Winny
        17
    Winny  
       2013-04-17 15:12:28 +08:00
    @FanError 没有文件,而且是别组的项目,只是在研发会议上报告过这个问题。(url的md5 hash。当时用作缓存key。)
    lookhi
        19
    lookhi  
       2013-04-17 15:51:22 +08:00
    @lqs 求 大小相同 而且 MD5也一样的图片文件
    janxin
        20
    janxin  
       2013-04-17 17:30:45 +08:00   ❤️ 1
    md5+sha1就行了,不过缺点是key会比较长
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1144 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 18:37 · PVG 02:37 · LAX 10:37 · JFK 13:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.