2011-05-13 38 views
0

我有一個MVC 3應用程序,允許用戶上傳文件與一些數據輸入的東西。我已經成立了一個控制器,讀取這些文件和緩存出來給用戶,像這樣MVC 3 ContentResult二進制文件與Firefox的奇怪問題

[OutputCache(Duration = 1200, VaryByParam = "id")] 
public ContentResult GetNarrative(int id) 
{ 
    Response.Clear(); 
    Response.BufferOutput = true; 
    Response.ContentType = "application/octet-stream"; 

    var narrative = attachRepo.GetNarrative(id); 
    if (narrative == null || narrative.Narrative == null) 
     return null; 

    Response.AddHeader("Content-Disposition", 
     string.Format("attachment;filename={0}", 
      Server.UrlEncode(narrative.Filename))); 

    Response.OutputStream.Write(narrative.Narrative.ToArray(), 
     0, narrative.Narrative.ToArray().Length); 
    Response.OutputStream.Flush(); 
    return Content(""); 
} 

這工作得很好很好,有趣的是,當我有輸出緩存行,我的Firefox下載對話框看起來是這樣的

open with chrome?

然而,當我註釋掉輸出緩存行,它看起來像預期的對話框

open in word like expected

這不是一個真正的阻塞問題,因爲它在IE和Chrome中工作得很好,只是默認下載,但我很好奇爲什麼會出現這種情況,如果有人經歷過這個問題並解決它的話。

謝謝!

+0

啓用緩存後是否仍能正確下載? – ataddeini 2011-05-13 19:11:54

+0

是的,它下載的很好,如果你試圖打開它(從提示符),它會打開鉻並顯示二進制數據 - 這是非常奇怪的。下載後在Windows中打開工作很好,但。 – Jimmy 2011-05-13 20:05:39

回答

0

我發現Firefox會忽略附件中的文件名。它傾向於使用他的URL來設置文件名。

嘗試把在網址的結尾?filename.docx

,看看它是否修復了的東西。

+0

...但在禁用緩存時它工作得很好 – Jimmy 2011-06-03 22:36:52