0

我有一个数据库表,其中包含id, filename, userId

  • id 是唯一标识符
  • 文件名也应该是唯一的
  • 表可能包含 >10000 条记录

当用户上传文件时,应按照给定规则将其输入数据库:

  1. 如果没有具有相同文件名的记录,则应按原样添加(例如foobar.pdf
  2. 如果有相同文件名的记录,则应添加为 uploadName(2).ext ( foobar(2).pdf )
  3. 如果有 n 条具有相同基本文件名 ( foobar ) 的记录,则应将其添加为 uploadName(n+1).ext ( foobar(20).pdf )
  4. 现在如果foobar(2).pdf被上传,它应该被添加为foobar(2)(2).pdf等等

需要遵循此模式,因为在将详细信息发送到服务器之前,文件已经在客户端使用 ajax 上传,并且文件托管服务遵循上述规则来命名文件。


我的解决方案:

  1. 维护一个包含所有名称和发生次数的文件。
  2. 如果输入文件中存在的文件名,则增加出现次数并生成新名称,否则将其添加到文件中
  3. 如果生成的新名称在数据库中,则将其添加到文件并生成新名称
4

1 回答 1

1

我建议您,因为是上传应用程序,请执行以下操作

  • 在您的文件表中创建一个列来存储文件的原始名称
  • 创建另一个列来存储文件的新生成名称,该名称将是一些 md5 或原始哈希加上上传时的时间戳,这样您就不会有重复的名称。
  • 然后,当您上传文件时,您将使用这个新名称保存在磁盘上,但将原始名称显示给任何请求它的应用程序,如果您需要下载或流式传输它,只需从数据库中获取保存的哈希名称。

  • 于 2013-10-29T23:58:05.650 回答