Chrome,pdf显示,从服务器收到的重复标题
我在网站上有一个部分,在一个灯箱内显示pdf。 最近的Chrome升级打破了这个显示:
错误349(net :: ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION):接收到多个Content-Disposition头。 这是不允许的,以防止HTTP响应分裂攻击。
这仍然在IE中正常工作。
我在IIS6上使用ASP.NET MVC3
我用来生成文件的代码如下。
如果我删除内联语句,然后下载文件,但打破了灯箱的function。
问题代码
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");
如果你不需要指定文件名,上面的解决scheme是好的,但我们希望保持为用户指定的文件名默认。
我们的解决scheme最终成为文件名本身,因为它包含一些逗号。 我用逗号replace了逗号,现在文件在Chrome中按照预期提供了文档。
FileName = FileName.Replace(",", "") Response.ContentType = "application/pdf" Response.AddHeader("content-disposition", "attachment; filename=" & FileName) Response.BinaryWrite(myPDF)
我用@ roryok的评论,包装文件名引号:
Response.AddHeader("content-disposition", "attachment; filename=\"" + FileName + "\"")
@编码器的使用单引号的回答在IE中没有按预期的那样工作。 用单引号下载的文件仍然在名称中。
今天有这个问题。 Per roryok和其他人,解决scheme是把文件名放在引号中。
以前,Chrome浏览器FAIL:
header("Content-Disposition: attachment; filename=$file");
目前,Chrome确定:
header("Content-Disposition: attachment; filename='$file'");
注意$file
周围的引号。
解决这个任何文件types与自定义文件名删除(或类似的标题)
Response.AppendHeader("Content-Disposition", "inline;");
并添加
string fileName = "myfile.xlsx" return File(fileStream, System.Web.MimeMapping.GetMimeMapping(Path.GetFileName(filePath)), fileName);
您也可以在第一个参数中使用文件path而不是stream
我的问题是由于双引号如下所示:
var encoding = System.Text.Encoding.UTF8; *Response.AddHeader("Content-Disposition", string.Format("attachment; filename=**\"{0}\"**", HttpUtility.UrlEncode(file, encoding)));*
改变上面这个工作!
*Response.AddHeader("Content-Disposition", string.Format("attachment; filename=**{0}**", HttpUtility.UrlEncode(file, encoding)));*