使用散列存储具有唯一文件名的图像

时间:2011-11-28 15:23:17

标签: java servlets hash

我正在寻找一种使用Java Servlet为Web应用程序存储唯一文件名的解决方案。

我需要的是在网页中呈现个人资料图片,因为我决定只在数据库中存储文件名,我只能确保它们在图像文件夹中是唯一的:为了达到这个目的我想要命名图像并使用由这对夫妇组成的字符串名称保存它们:

<user_id>_<hash>.<file-type> 

通过这种方式,我认为我很确定不会发生冲突,因为user_ids已经是唯一的。

1)这个解决方案听起来好吗?

2)我应该为此目的选择什么算法?

我想正确使用它,因此非常感谢代码片段。

由于

3 个答案:

答案 0 :(得分:4)

您可以使用File#createTempFile(),其中指定前缀,后缀和文件夹。生成的文件名保证是唯一的。

File file = File.createTempFile("name-", ".ext", new File("/path/to/uploads"));
// ...

不,这个文件在退出时不会被自动删除或其他东西,它只是临时文件生成机制的一部分。

答案 1 :(得分:2)

非常简单的方法是将System.currentTimeMillis()附加到用户标识。如果userid是唯一的,那么它应该是非常安全的。

答案 2 :(得分:0)

如果它是1对1的映射,为什么要附加哈希或任何东西? 1个用户到1个个人资料图片,只需使用他们的ID。如果它是1到多,则将记录保存在数据库中并获取该记录的id并将其用作名称。您可能希望将所有图像转换为特定的图像格式,以便保持一致,因此也不会将其存储在数据库中。

BalusC tempfile方法可以完美地与这个呈现的概念一起使用。