Java 根据HTTP请求创建的PDF赢得';无法在Internet Explorer中打开

Java 根据HTTP请求创建的PDF赢得';无法在Internet Explorer中打开,java,internet-explorer,pdf,flying-saucer,Java,Internet Explorer,Pdf,Flying Saucer,我有一个servlet,它根据请求中的一些参数动态生成一个PDF文件。当我尝试在IE中打开/下载此文件时,我收到以下消息: “无法从[site]下载[filename]。 无法打开此Internet站点。请求的站点不可用或找不到。请稍后再试。“ 以下是我对响应的设置: response.setHeader("Content-Disposition", "attachment;filename=" + title + ".pdf"); response.setContentType("appli

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

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

以下是我对响应的设置:

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

response.setContentType("application/pdf");
与其他浏览器配合使用时一切正常

更新:

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

我尝试过在文件名周围加上简单、双引号和无引号,因为文件名不包含任何未转换的字符。双引号和无引号没有什么区别,但单引号会附加到文件名中,我当然不希望这样

文件名不包含任何未转换的字符

我已经检查了页面上的测试,上面说所有浏览器都通过了测试。这是从一开始就使用的

添加内容长度标题没有任何区别


顺便说一句,飞碟是用来制作PDF的。

我建议看一看,其中列出了一系列测试用例,以了解不同浏览器如何使用不同的
内容配置值进行操作。我的猜测是
标题
包含空格或其他一些需要转义的特殊字符,IE当前正在对非转义值进行呕吐。

您是否尝试过以下标题:

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

文件名应该被删除。

我也有同样的问题,结果是IE不会处理响应代码201(所有其他浏览器都会处理)。当我把它改成200的时候,IE下载的文件很好


给我指出了正确的方向。

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

使用中的CMS添加了一些我起初没有考虑的标题:

  • 缓存控制:专用
  • Pragma:没有缓存
如果没有缓存,IE似乎存在下载问题。这些标题在CMS的升级中被更改,从而解决了问题

例如:

  • 缓存控制:公共,最大年龄=31536000
  • 日期:2012年12月6日星期四14:14:14 GMT
  • 过期时间:2013年12月6日星期五14:14:14 GMT

    • 通过下面的代码,我可以在IE浏览器中下载pdf。 response.setHeader(“内容处置”、“附件;文件名=“+title+”.pdf”)


      非常感谢。

      我现在已经试过了。将打开一个新窗口,并且没有任何错误消息。但新窗口中没有内容。在其他浏览器上仍然可以正常工作。谢谢,这非常有用。但是所有浏览器都通过了与我的头相同的测试用例。标题中也没有非转义值。要发送的标题的完整值是多少?对于调试,发送的所有其他响应头是什么?