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

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

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

我是第一次做这个。
8369 次点击
所在节点    问与答
9 条回复
wdd2007
2013-07-18 21:55:44 +08:00
取文件md5值作为文件名,这样同样的文件也只用保存一份了.
cloverstd
2013-07-18 22:13:51 +08:00
@wdd2007 谢谢,每个文件的 md5 值是不是定长啊?
11138
2013-07-18 22:19:10 +08:00
MD5值都是32个字符定长的,无论是字符串还是文件。
hhrmatata
2013-07-18 23:31:25 +08:00
只有当文件上传完成以后才能计算md5值,并对文件进行重命名。
上传的时候仍然需要给文件命一个临时名字,并且不能重复。
donald
2013-07-18 23:40:13 +08:00
命名前先检查下是否重复?为什么不能用原文件名?
cloverstd
2013-07-19 02:31:07 +08:00
@donald 为了方便管理
@hhrmatata 文件上传前的名字就是临时名,我是直接保存二进制流
donald
2013-07-19 02:50:43 +08:00
@cloverstd 还有一个问题是如果上传的文件之前已经有过相同的了,你不覆盖,再存一份? 这样就别用随机名了吧,时间戳+递增序号
alexrezit
2013-07-19 08:00:24 +08:00
递增.
korvin
2015-01-24 16:10:40 +08:00
我是 时间戳+3位随机数+UID

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

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

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

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

© 2021 V2EX