2011-09-14 35 views
2

我的ASP.NET MVC應用程序接受上傳的文件並將它們存儲在單個文件夾中。不過,我想確保當用戶上傳文件時,應用程序接受任何文件名,但是當用戶嘗試上傳具有相同文件名的文件時,這將失敗。爲上傳文件創建唯一文件名/位置的策略

我想我可以爲每個文件創建單獨的文件夾,但我想要一個乾淨而平坦的目錄結構。目前我將一個GUID附加到文件名中,但這不是一個好的解決方案,因爲當用戶下載文件時會導致文件名奇怪。 我曾考慮將文件數據存儲在數據庫中,然後在請求時將其寫出到文件中,但這會產生很大的開銷。

任何替代方法?

回答

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; 

用戶下載文件時提示打開/保存原文件名的文件。

希望,這有助於。