Asp.net mvc 为上载文件创建唯一文件名/位置的策略
我的ASP.NET MVC应用程序接受上载的文件并将其存储在单个文件夹中。但是,我想确保当用户上传文件时,应用程序接受任何文件名,但是当用户尝试上传具有相同文件名的文件时,这将失败 我想我可以为每个文件创建单独的文件夹,但我希望有一个干净、扁平的目录结构。目前,我在文件名中附加了一个GUID,但这不是一个好的解决方案,因为当用户下载文件时,它会导致奇怪的文件名。 我曾考虑将文件数据存储在数据库中,然后在请求时将其写入文件,但这会带来很大的开销Asp.net mvc 为上载文件创建唯一文件名/位置的策略,asp.net-mvc,file-upload,Asp.net Mvc,File Upload,我的ASP.NET MVC应用程序接受上载的文件并将其存储在单个文件夹中。但是,我想确保当用户上传文件时,应用程序接受任何文件名,但是当用户尝试上传具有相同文件名的文件时,这将失败 我想我可以为每个文件创建单独的文件夹,但我希望有一个干净、扁平的目录结构。目前,我在文件名中附加了一个GUID,但这不是一个好的解决方案,因为当用户下载文件时,它会导致奇怪的文件名。 我曾考虑将文件数据存储在数据库中,然后在请求时将其写入文件,但这会带来很大的开销 有其他方法吗?为了保持目录结构平坦,请通过附加GUI
有其他方法吗?为了保持目录结构平坦,请通过附加GUID(正如您已经做的那样)来存储文件。在下载处理程序(控制器操作方法)中,首先通过从文件名中删除GUID将基于GUID的文件名转换为原始文件名。然后使用
FileContentResult
类传输文件。您可以设置FileDownloadName
属性来指定要传输的文件的文件名。实际上,FileDownloadName
属性在引擎盖下设置内容处置头
下面是一个小代码示例(下载控制器类的操作方法):
将提示下载文件的用户以原始文件名打开/保存文件
希望,这有帮助
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;