2011-12-21 62 views
51

我有一個網站,我顯示一個光盒內一個pdf上的部分接收的重複報頭。最近鉻升級已經打破了這種顯示:鉻,PDF格式顯示,從服務器

錯誤349(淨值:: ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION):收到 多內容處置頭。我們不允許這種情形 防止HTTP響應拆分攻擊。

這仍然正常工作在IE中。

我使用ASP.NET MVC3在IIS6

我用它來生成文件的代碼如下。

如果我刪除inline語句然後將該文件下載,但是,打破了收藏夾功能。

問題代碼

public FileResult PrintServices() 
{ 
    //... unrelated code removed 
    MemoryStream memoryStream = new MemoryStream(); 
    pdfRenderer.PdfDocument.Save(memoryStream); 
    string filename = "ServicesSummary.pdf"; 

    Response.AppendHeader("Content-Disposition", "inline;"); 

    return File(memoryStream.ToArray(), "application/pdf", filename); 
} 

的修復

刪除

Response.AppendHeader("Content-Disposition", "inline;"); 

然後更改

return File(memoryStream.ToArray(), "application/pdf", filename); 

return File(memoryStream.ToArray(), "application/pdf"); 
+0

相關:http://stackoverflow.com/questions/1187261/whats-the-difference-between-the-four-file-resu lts-in-asp-net-mvc – 2016-01-11 16:24:44

+0

[將文件返回到ASP.NET MVC中查看/下載]可能的副本(http://stackoverflow.com/questions/5826649/returning-a-file-to-view- download-in-asp-net-mvc) – 2016-01-11 19:23:01

+0

相關:http://stackoverflow.com/a/16673120/109941 – 2016-01-11 19:30:03

回答

66

上面的解決方案是好的,如果你不需要指定文件名,但我們想保持用戶指定的文件名默認值。

我們的解決方案最終是文件名本身,因爲它包含了一些逗號。我用逗號替換了逗號,文件現在按照預期在Chrome中傳遞文檔。

FileName = FileName.Replace(",", "") 

Response.ContentType = "application/pdf" 
Response.AddHeader("content-disposition", "attachment; filename=" & FileName)  
Response.BinaryWrite(myPDF) 
+3

您還可以在文件名周圍添加引號。 – Nik 2012-03-25 14:47:27

+0

與DocRaptor和PHP'header()'相同的問題和解決方案。謝謝。 – Boaz 2013-01-07 08:59:29

+31

同樣的問題在這裏,但只有通過將文件名放在引號中才能解決: 'Response.AddHeader(「content-disposition」,「attachment; filename = \」「+ FileName +」\「」)' – roryok 2013-04-03 09:46:47

1

今天有這個問題。 Per roryok和其他人,解決方案是將文件名放在引號中。

上,Chrome的失敗:

header("Content-Disposition: attachment; filename=$file"); 

目前,鉻OK:

header("Content-Disposition: attachment; filename='$file'"); 

注意周圍$file引號。

+0

對於我在IE瀏覽器中,單引號導致文件使用單引號下載文件名:'Blah,Inc. 847.pdf' – Homer 2014-08-14 16:39:22

13

我用@ roryok的評論,包裹在報價文件名:使用單引號按預期在IE瀏覽器沒有工作的

Response.AddHeader("content-disposition", "attachment; filename=\"" + FileName + "\"") 

@a編碼的答案。用單引號下載的文件仍然在名稱中。

var encoding = System.Text.Encoding.UTF8; 

*Response.AddHeader("Content-Disposition", string.Format("attachment; filename=**\"{0}\"**", HttpUtility.UrlEncode(file, encoding)));* 

改變上述這一工作:如下圖所示

+0

此解決方案適用於我。我只是在逃脫的雙引號中添加了問題,並且問題自行解決了。謝謝! – IAmTimCorey 2016-11-14 21:47:48

0

我的問題是,由於雙引號!

*Response.AddHeader("Content-Disposition", string.Format("attachment; filename=**{0}**", HttpUtility.UrlEncode(file, encoding)));* 
0

解決這一問題具有自定義文件名的任何文件類型刪除(或類似標題)

Response.AppendHeader("Content-Disposition", "inline;"); 

,並添加

string fileName = "myfile.xlsx" 
return File(fileStream, System.Web.MimeMapping.GetMimeMapping(Path.GetFileName(filePath)), fileName); 

你也可以使用的文件路徑,而不是一個流中的第一個參數