2011-11-04 68 views
1

我們有一個圖像文件下載操作。 代碼.Net MVC FileResult損壞的png文件,一個字節關閉

public virtual FileResult Attachment(Guid Id) 
     { 
      ...code for attachment.. 

      Response.AddHeader("content-disposition", "attachment; filename=" + attachment.FileName); 
      Response.AddHeader("content-type", attachment.ContentType); 
      Response.AddHeader("cache-control", "must-revalidate"); 
      return File(attachment.Content, attachment.ContentType); 

     } 

當我們測試這個動作,我們總是得到損壞的文件。我將腐敗文件與原始用戶記事本++進行了比較,發現有一個新行字符添加到文件中。我在記事本++中刪除了新行,並修復了圖像。

我們檢查了附件的內容,我們確信內容是正確的。

我們正在運行.NET MVC 3,我們不得不爲PNG內容類型是「圖像/ PNG」

+0

什麼是'attachment.Content'? –

+0

它是在字節[]中輸入 –

+0

它是如何設置的?它是否被證實是正確的? –

回答

1

提琴手的結果(即fiddler2.com),看看頭和結果。您也可以從那裏保存結果並測試該文件。新行是開始還是結束?如果開頭,它可能的標題。如果它最後,你是否運行任何可以添加一個空結果(或者你認爲)的ActionFilters實際上是一個添加的新行?用另一個文件測試它 - 相同的結果?

如果可能,在另一個系統上測試它 - 相同的結果?

+1

謝謝,我們的BaseController的重寫OnActionExecuting方法中發現問題。它在任意位置向輸出插入一個新行。應該是thedailywtf的一個很好的候選人:) –

1

檢查什麼其他的頭已經在之前(或之後)的響應已經填充將您的自定義標題。這可能是你得到一些無關頭引起的問題。

這可能是因爲調用ClearHeaders

的工具,如實時HTTP標頭Firefox的插件可能會有所幫助,以及簡單的。

+0

感謝您的建議。我試過但沒有工作。 –