每次为我的网站生成一个随机值

时间:2011-10-29 17:37:33

标签: javascript file-upload random cgi

我正在使用CGI将文件上传到我们公司的网站。在管理面板中,员工可以上传图像以对应于稍后存储在JSON中的特定对象。所有这些都有效,但如果员工A上传dog.png,然后员工B上传dog.png。员工B的图片将覆盖员工A的图片,两者都将引用相同的图片。我想到获取图像的哈希并将其命名为自己的哈希,问题是,在上传之前读取文件有点粗略与浏览器支持(安全问题)并将其保存到服务器,获取哈希值,重新保存,然后删除旧文件很慢并且被黑了。

我的问题

考虑到这一点,为每个文件指定唯一名称的最佳方法是什么?该文件的名称完全无关紧要,只要它遵循保存约定(即没有/.)。我还必须能够在上传文件之前生成名称。

我目前使用的是什么

  • JQuery的
  • 的Javascript
  • CGI(Python)

4 个答案:

答案 0 :(得分:2)

用于在Javascript中生成客户端上的随机名称:

Math.random().toString(16).replace(/\./, '')

在服务器上用PHP进行:

mt_rand()

答案 1 :(得分:1)

将图片存储在具有员工ID的目录下,或使用员工的ID作为文件名的一部分。

我不明白为什么你必须在上传之前生成名称,但它与你的问题文本不符,因为你不知道上传文件的名称(“dog.png”in你的例子)直到它被上传,所以除非你选择了两次相同的名字,否则没有命名冲突的危险。

如果您在上传前生成文件名,请在服务器上创建一个GUID,并完全忽略文件名实际上是什么。

答案 2 :(得分:1)

我有一个类似的系统,用于将图像上传到我的网站以获取产品。

每个产品都有自己的文件夹,这是数据库中产品的ID,但这并不是真正相关的。

图像只是以

格式上传时的名称
itemID-TimeAsUnix.jpg

这样可以正常工作,因为不能重复时间戳。如果两个项目在完全相同的时间上传到第二个,则会失败,所以我想单独的文件夹在这里有帮助。

如果上传频率非常低,或者只是追加一个随机数,或者是一个用户名或什么东西,你可以取消文件夹吗?

答案 3 :(得分:0)

也许在javascript中创建一个guid。然后,您将拥有上传文件的唯一标识符。

来自较旧的 SO 问题here

function S4() {
   return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
}
function guid() {
   return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());
}