4

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

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

这是我设置的响应:

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

response.setContentType("application/pdf");

其他浏览器一切正常。

更新:

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

我尝试了简单的、双引号和不包含任何未转义字符的文件名。双引号和无引号没有区别,但是单引号会附加到文件名中,我当然不想要。

文件名不包含非转义字符。

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

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

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

4

5 回答 5

3

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

于 2012-09-27T15:46:54.687 回答
2

您是否尝试过以下标题:

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

文件名应该大写。

于 2012-09-27T15:50:48.927 回答
2

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

正在使用的 CMS 添加了一些我一开始没有考虑到的标题:

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

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

例子:

  • 缓存控制:公共,最大年龄=31536000
  • 日期:格林威治标准时间 2012 年 12 月 6 日星期四 14:14:14
  • 过期:格林威治标准时间 2013 年 12 月 6 日星期五 14:14:14
于 2013-09-25T13:56:23.830 回答
1

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

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

于 2013-05-31T21:15:47.810 回答
0

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

非常感谢。

于 2014-11-24T06:38:39.020 回答