2011-12-21 63 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); 

你也可以使用的文件路径,而不是一个流中的第一个参数