我的ASP.NET MVC应用接受上传的文件并将其存储在一个文件夹中。但是我想确保当用户上传文件时,应用程序接受任何文件名,但是当用户尝试上传具有相同文件名的文件时,这将失败。
我想我可以为每个文件创建单独的文件夹,但我想要一个干净平整的目录结构。目前我将GUID附加到文件名,但这不是一个很好的解决方案,因为当用户下载文件时会导致奇怪的文件名。 我想过将文件数据存储在数据库中,然后在请求时将其写入文件,但这是一个很大的开销。
任何替代方法?
答案 0 :(得分:3)
为了使您的目录结构保持平坦存储您的文件,方法是附加一个GUID(就像您已经做过的那样)。在下载处理程序(控制器操作方法)中,首先通过从文件名中删除GUID,将基于GUID的文件名转换为原始文件名。然后使用FileContentResult
类传输文件。您可以设置FileDownloadName
属性以指定要传输的文件的文件名。事实上,FileDownloadName
属性设置了Content-Disposition标题。
这是一个小代码示例(下载控制器类的操作方法):
string fileToDownload = "test.jpg_4274B9D4-9084-441C-9617-EAD03CC9F47F";
string originalFileName = fileToDownload.Substring(0, fileToDownload.LastIndexOf('_'));
FileContentResult result = new FileContentResult(
System.IO.File.ReadAllBytes(Server.MapPath(String.Format("~/files/{0}", fileToDownload))), "application/binary");
result.FileDownloadName = originalFileName; // Sets the Content-Disposition header
return result;
提示下载文件的用户使用原始文件名打开/保存文件。
希望,这有帮助。