2011-05-26 42 views
4

我有一個實現IHttpHandler的自定義處理程序。自定義處理程序允許我們爲人們下載文件生成一個動態URL。自定義處理程序不像Firefox上的空格

的代碼看起來是這樣的,

public void ProcessRequest(HttpContext context) 
{ 
    context.Response.AddHeader("Content-Disposition", "attachment;filename=" + attachment.FileName); 
    context.Response.AddHeader("Content-Length", attachment.Fileblob.Length.ToString()); 
    context.Response.ContentType = GetMimeType(attachment.FileName); 
    context.Response.OutputStream.Write(attachment.Fileblob, 0, attachment.Fileblob.Length); 
} 

問題是與attachment.Filename。如果文件名恰好有這樣的空間,

文件名 - 1.bmp

然後在Internet Explorer,它工作正常,但在Firefox中的文件下載對話框截斷它是這樣,

文件名

沒有擴展或任何東西。我也試過這個,

attachment.FileName.Replace(」」,‘%20’)

這在IE中再次工作,但在Firefox它導致文件名被設置爲這個在下載對話框,

文件名%20-%201.bmp

我也試過,

HttpUtility.UrlEncode(attachment.FileName)

在兩種火狐一個第二IE導致此,

文件名+ - + 1.bmp

任何想法?

回答

6

嘗試用%20代替實際空格字符。應該仍然適用於所有瀏覽器。

編輯

好了,這樣就不會出現有幫助。計劃B,然後。

讓我們嘗試調整我們的Content-Disposition HTTP標頭,以便附件文件名用雙引號包裝,每RFC 2231

public void ProcessRequest(HttpContext context) 
{ 
    context.Response.AddHeader("Content-Disposition", String.Format("attachment;filename=\"{0}\"", attachment.FileName)); 
    context.Response.AddHeader("Content-Length", attachment.Fileblob.Length.ToString()); 
    context.Response.ContentType = GetMimeType(attachment.FileName); 
    context.Response.OutputStream.Write(attachment.Fileblob, 0, attachment.Fileblob.Length); 
} 
+0

查看以上編輯的問題 – peter 2011-05-26 05:12:58

+0

大部分工作正常。在IE中,它將文件中的哈希變成像'filename#.docx'到'filename_.docx'。雖然沒有高度優先。 – peter 2011-05-29 22:21:58