【问题标题】:File upload creating a temp file but additionally keeping track of the actual filename文件上传创建临时文件,但另外跟踪实际文件名
【发布时间】:2016-08-21 18:49:45
【问题描述】:

谁能给我一些关于存储临时文件的技术如何工作的建议。

例如,我正在创建一个简单的网络照片库管理。我使用 PhotoGalleryId 作为外键将 PhotoGallery 和照片信息保存在数据库中。对于每张照片,我都存储了文件名:即(photoname.jpg)。这样,当我从数据库中检索照片时,我可以简单地将文件名与根路径结合起来设置 img src。

我想进一步增强这一点,以便在用户上传文件时使用随机生成的文件名,而不是他们命名的文件名,以确保它始终是唯一的。此外,有人可以解释使用临时目录的技术,以及我是否必须将临时文件名存储在数据库(照片表)中。

【问题讨论】:

  • 如果您知道哪个文件夹包含图像,您可以完全解决这个问题。我的建议要么是使用照片图像的一部分哈希,要么只是随机创建具有足够文件名长度的名称,然后尝试将其插入到具有唯一约束的 db 列中,并单独存储文件扩展名如果您想保留原始列,则可以在列中进行操作,例如,您可以执行类似 abc.com/img/h5b923ijo 的操作并在内部引用该文件,这只是一个想法:)

标签: c# asp.net file-upload photo-gallery system.io.file


【解决方案1】:

你可以:

1) 在保存为任何内容之前重命名文件(如果需要,包括使用 GUID),并按如下方式存储文件数据:

Create table fileData(...originalFileName varchar(x), savedFileName varchar(x), basePath varchar(x)...)

这将跟踪原始上传文件名、您存储文件的路径以及您决定保存文件的文件名。不需要临时文件。

2) 将照片本身存储在数据库中,并完全消除目录/命名问题。

如果您需要详细信息,请显示您的代码。

【讨论】:

  • 感谢您的回复,您能否回答以下几个问题: 所以存储原始文件名的目的是如果用户去下载文件,我可以将原始名称返回给他们原始文件名没用对吗? img src 将始终使用随机生成的文件名,因为那是磁盘上实际存在的名称是否正确?另外,如果它是系统设置,为什么我需要存储 basePath 以便我可以将它与 fileName 结合起来。
  • 是的-在这种情况下,除非您想将原始文件名还给用户,否则不需要原始文件名-您提到了保存它,这就是我这样回答的原因,但它会基本上一文不值。存储基本路径可以让您创建不同的目录,以防您获得大量文件(每月或每 1,000 个文件的不同目录等)。它们只是想法 - 没有什么是一成不变的。
猜你喜欢
  • 2014-12-19
  • 2018-01-18
  • 1970-01-01
  • 2013-05-05
  • 2013-07-10
  • 1970-01-01
  • 2013-01-06
  • 1970-01-01
  • 2018-08-17
相关资源
最近更新 更多