在HTTP请求中创建的PDF将无法在Internet Explorer中打开

我有servlet根据请求中的一些参数动态生成PDF到响应。 当我尝试在IE中打开/下载此文件时,我收到以下消息:

“无法从[site]下载[filename]。无法打开此Internet站点。请求的站点要么不可用,要么找不到。请稍后再试。”

这是我设置的响应:

response.setHeader("Content-Disposition", "attachment;filename=" + title + ".pdf"); response.setContentType("application/pdf"); 

其他浏览器一切正常。

更新:

我尝试过内联而不是附件。 这将打开一个新窗口而不是打开/保存对话框(我希望有对话框),错误消息消失了,但新窗口在IE中只是空的。 仍在使用其他浏览器。

我试过简单,双重,没有引号围绕文件名,不包含任何未转义的字符。 双重和没有引号没有区别,但单个文件附加到文件名,我当然不想要。

文件名不包含未转义的字符。

我已经检查了这个页面上的测试,它表示所有浏览器都会传递带有文件名,没有引号的附件 。 这是从一开始就使用的。

添加Content-Lenght标头没有区别。

顺便说一句,飞碟用于制作PDF。

我建议看一下http://greenbytes.de/tech/tc2231/ ,其中列出了一大堆测试用例,说明了不同的浏览器如何使用不同的Content-Disposition标头值。 我的猜测是title包含空格或其他需要转义的特殊字符,IE目前正在对非转义值进行处理。

您是否尝试过以下标题:

 response.setHeader("Content-Length", lenght); response.setHeader("Content-Disposition", "inline; filename='" + filename + "'"); 

文件名应该被删除。

这已经有一段时间了,但我认为我应该更新这个,因为找到了解决方案。

正在使用的CMS添加了一些我最初没有考虑的标题:

  • 缓存控制:私有
  • Pragma:没有缓存

如果没有缓存,似乎是IE的下载问题。 这些标题在CMS的升级中被更改,这解决了问题。

例:

  • Cache-Control:public,max-age = 31536000
  • 日期:2012年12月6日星期四14:14:14 GMT
  • 到期日:2013年12月6日星期五14:14:14 GMT

我有同样的问题,最终是IE不会处理响应代码201(所有其他浏览器处理它)。 当我把它改为200 IE时,下载文件就好了。

这篇文章指出了我正确的方向。

通过下面的代码我可以在IE浏览器中的pdf。 response.setHeader(“Content-Disposition”,“attachment; filename =”+ title +“。pdf”);

非常感谢。