我正从服务器下载PDF。我将“Content-Disposition”设置为“附件”。它的工作非常好,是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();
答案 0 :(得分: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从服务器下载文件。
答案 1 :(得分: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作为附件。
答案 2 :(得分:1)
我同意Multiplexer。 实际上问题是,如果'filename'没有以与Windows中的Acrobat Reader相关联的后缀结尾。只要添加“.pdf”就可以了。
然后是Cache-Control: no-cache
的pitfal会导致IE呕吐。
使用Cache-control: private
来阻止缓存。