cloverstd
V2EX  ›  问与答

如何有效的给上传的文件命名避免重复?

  •  
  •   cloverstd · Jul 18, 2013 · 8929 views
    This topic created in 4710 days ago, the information mentioned may be changed or developed.
    我用的是 SWFUpload。
    用户可以同时上传 6 个文件,我在后台用接收到的时间戳(精确到微秒,也就是最多 24 个数字)给文件重命。
    现在我在本地测试就出现问题了,上传的文件太小,导致后台得到的时间戳可能相同,也就是上传 6 个文件,后台接收到了 6 个 POST,但是保存下来可能只有 5 个或者更少的文件,因为时间戳相同。
    我现在打算用时间戳 + 随机数来作为文件名。但是我想到如果同时多个用户上传,也可能得到同样的时间戳 + 同样的随机数。所以我也在想加入 UID 到文件名中。

    我想知道有没有啥更好的方法?谢谢

    我是第一次做这个。
    9 replies    2015-01-24 16:10:40 +08:00
    wdd2007
        1
    wdd2007  
       Jul 18, 2013   ❤️ 1
    取文件md5值作为文件名,这样同样的文件也只用保存一份了.
    cloverstd
        2
    cloverstd  
    OP
       Jul 18, 2013
    @wdd2007 谢谢,每个文件的 md5 值是不是定长啊?
    11138
        3
    11138  
       Jul 18, 2013   ❤️ 1
    MD5值都是32个字符定长的,无论是字符串还是文件。
    hhrmatata
        4
    hhrmatata  
       Jul 18, 2013
    只有当文件上传完成以后才能计算md5值,并对文件进行重命名。
    上传的时候仍然需要给文件命一个临时名字,并且不能重复。
    donald
        5
    donald  
       Jul 18, 2013
    命名前先检查下是否重复?为什么不能用原文件名?
    cloverstd
        6
    cloverstd  
    OP
       Jul 19, 2013
    @donald 为了方便管理
    @hhrmatata 文件上传前的名字就是临时名,我是直接保存二进制流
    donald
        7
    donald  
       Jul 19, 2013
    @cloverstd 还有一个问题是如果上传的文件之前已经有过相同的了,你不覆盖,再存一份? 这样就别用随机名了吧,时间戳+递增序号
    alexrezit
        8
    alexrezit  
       Jul 19, 2013 via iPhone
    递增.
    korvin
        9
    korvin  
       Jan 24, 2015
    我是 时间戳+3位随机数+UID
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2757 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 15:34 · PVG 23:34 · LAX 08:34 · JFK 11:34
    ♥ Do have faith in what you're doing.