2012-09-14 73 views
2

在C#ASP.Net網站,要傳輸的文件給客戶,我使用的TransmitFile包含文件名空間

Stirng file_path=Server.MapPath("~/files/"+file_name); 
    HttpContext.Current.Response.ContentType = "application/octet-stream"; 
    HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + file_Name); 
    HttpContext.Current.Response.TransmitFile(file_path);   
    HttpContext.Current.Response.End(); 

它工作完美,但在文件名中包含任何空格下載的文件只有名稱直到第一個字。對於例如:如果我的文件名是「This is demo.txt」,則下載的文件名變爲「This」,不帶擴展名。因此下載它的用戶不能識別它的類型。
我們如何避免發生它包含空格的文件名?

我嘗試使用

Stirng file_path="'"+Server.MapPath("~/files/"+file_name)+"'"; 

但沒有工作。

編輯:
也是它不可能爲我更換(以「_」或「 - 」),或刪除所有存在於文件名是存在服務器上的空間。有一點幫助是非常感謝。

回答

7

您應該將文件名放在引號中。

HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=\"" + file_Name + "\""); 

如果你正在使用VS2015或更高版本,你可以把它有點整潔與串插:

HttpContext.Current.Response.AddHeader("Content-Disposition", $"attachment;filename=\"{file_Name}\""); 

而且,在頭文件名不必是一樣的文件的名稱。標題中的文件名只是對用戶的建議。

+0

完美!!!謝謝安德魯莫頓! –

相關問題