在用户生成的文件名中使用GUID是个好主意吗?

Aca*_*uza 4 .net c# guid

我正在构建一个应用程序(CMS),用户可以上传文件,如图像.

我的问题是如何重命名这些文件以保存.

我认为生成GUID(System.GUID.NewGuid())来保存文件是最好的方法.在这种情况下我是对的还是存在更好的方法?

注意:生成的GUID示例:7c9e6679-944b-7425-40from-e07fc1f90ae7.在这种情况下,图像文件将是:7c9e6679-944b-7425-40from-e07fc1f90ae7.jpg

更新:

用户不会直接与文件名进行交互.

seh*_*ehe 5

是.但是可能更方便的方案是使用内容的散列和(比如MD5-sum).

那样,

  • 文件名的生成是可重复的(如果出现问题,数据需要迁移到不同的服务器,内容在不同的安装中共享等).
  • 你会自动分享重复的上传.当然,那么你需要跟踪谁拥有该文件(并且不删除它,直到删除最后一个用法)

注意典型md5sum的示例是5eb63bbbe01eeed093cb22bb8f5acdc3(对于ASCII/UTF8"hello world")

编辑以响应注释(关于哈希冲突):确实,您可能会遇到与非常大的文档集的哈希冲突.在这种情况下,最常见的是使用散列和+文件的长度来标识'内容blob'.所以你要做的事情如下:

 http://cms.mysite.local/docs/123986/5e/b63bbbe/01eeed093cb22bb8f5acdc3.png
Run Code Online (Sandbox Code Playgroud)

对于一个长度~123Kb的png


bks*_*ksi 2

如果你想要更好的 SEO,你应该在 GUID 之前添加一些内容。更好的方法是结合解释图像/文件的内容生成您自己的唯一 ID(因为 SEO)。

例如,如果您有一个项目,则图像名称可以类似于:

itemId-ItemName.jpg