V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
cloverstd
V2EX  ›  问与答

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

  •  
  •   cloverstd · 2013-07-18 21:53:01 +08:00 · 8457 次点击
    这是一个创建于 4145 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我用的是 SWFUpload。
    用户可以同时上传 6 个文件,我在后台用接收到的时间戳(精确到微秒,也就是最多 24 个数字)给文件重命。
    现在我在本地测试就出现问题了,上传的文件太小,导致后台得到的时间戳可能相同,也就是上传 6 个文件,后台接收到了 6 个 POST,但是保存下来可能只有 5 个或者更少的文件,因为时间戳相同。
    我现在打算用时间戳 + 随机数来作为文件名。但是我想到如果同时多个用户上传,也可能得到同样的时间戳 + 同样的随机数。所以我也在想加入 UID 到文件名中。

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

    我是第一次做这个。
    9 条回复    2015-01-24 16:10:40 +08:00
    wdd2007
        1
    wdd2007  
       2013-07-18 21:55:44 +08:00   ❤️ 1
    取文件md5值作为文件名,这样同样的文件也只用保存一份了.
    cloverstd
        2
    cloverstd  
    OP
       2013-07-18 22:13:51 +08:00
    @wdd2007 谢谢,每个文件的 md5 值是不是定长啊?
    11138
        3
    11138  
       2013-07-18 22:19:10 +08:00   ❤️ 1
    MD5值都是32个字符定长的,无论是字符串还是文件。
    hhrmatata
        4
    hhrmatata  
       2013-07-18 23:31:25 +08:00
    只有当文件上传完成以后才能计算md5值,并对文件进行重命名。
    上传的时候仍然需要给文件命一个临时名字,并且不能重复。
    donald
        5
    donald  
       2013-07-18 23:40:13 +08:00
    命名前先检查下是否重复?为什么不能用原文件名?
    cloverstd
        6
    cloverstd  
    OP
       2013-07-19 02:31:07 +08:00
    @donald 为了方便管理
    @hhrmatata 文件上传前的名字就是临时名,我是直接保存二进制流
    donald
        7
    donald  
       2013-07-19 02:50:43 +08:00
    @cloverstd 还有一个问题是如果上传的文件之前已经有过相同的了,你不覆盖,再存一份? 这样就别用随机名了吧,时间戳+递增序号
    alexrezit
        8
    alexrezit  
       2013-07-19 08:00:24 +08:00 via iPhone
    递增.
    korvin
        9
    korvin  
       2015-01-24 16:10:40 +08:00
    我是 时间戳+3位随机数+UID
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2357 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 01:02 · PVG 09:02 · LAX 17:02 · JFK 20:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.