1

我正在从我的服务器下载 PDF。我将“内容处置”设置为“附件”。它的工作非常好是Firefox。但在 IE8 中它显示为内联。任何快速的指针来解决这个问题?

编辑:

我正在使用 Springs 编写 PDF 字节数组流。并在客户端使用JSP进行显示。

客户端:

我正在使用 dhtml 网格并保留一个标签。网格中的代码如下所示:

<a href='javascript:viewPDF(14)' target="_self" >View</a>

点击这个方法 viewPDF 被调用。我将此代码保存在我的 javascript 文件中。

function viewPDF(id) {
    $("#pdfID").val(id);
    $("#myform").attr('action',url);
    $("#myform").submit();
}

服务器端代码库:

ByteArrayOutputStream reportBAOS = getPDFByteArrayStream();/*This is my method which returns the byte array stream.*/
response.setContentType("application/pdf");
response.setHeader("Content-Disposition","attachment; filename=testfile");
response.setHeader("Pragma","Public");
response.setHeader("Cache-Control","must-revalidate,post-check=0,pre-check=0");
response.setHeader("Expires","0");
ServletOutputStream os = response.getOutputStream();
os.write(reportBAOS.toByteArray());
os.flush();
os.close();
4

3 回答 3

2

我花了一天时间弄清楚问题出在哪里。但最后我明白了。

我不能说Evan Mulawski的回答是错误的。我什至尝试了他的代码。但没有帮助。最后我发现文件扩展名不见了。我只是将 .pdf 附加到 testfile 中。

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

现在我删除了以下内容。

response.setHeader("Pragma","Public");
response.setHeader("Cache-Control","must-revalidate,post-check=0,pre-check=0");
response.setHeader("Expires","0");

即使使用上面的代码,我仍然将 PDF 作为附件。

于 2010-12-02T11:16:52.620 回答
2

添加这些标题:

header("Pragma: public"); //This one may work by itself.
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("200 HTTP/1.0 OK"); //HTTP 1.0 Compatible

这将强制 Internet Explorer 从服务器下载文件。

于 2010-11-29T13:14:11.613 回答
1

我同意多路复用器。实际上问题在于,如果“文件名”不以与 Windows 中的 Acrobat Reader 关联的后缀结尾。只要您添加“.pdf”,它就可以正常工作。

然后Cache-Control: no-cache就是会导致 IE 呕吐的陷阱。用于 Cache-control: private防止缓存。

于 2011-10-04T09:26:21.263 回答