IE8问题:PDF文件显示为内联文件
-
29-09-2019 - |
题
我正在从服务器下载PDF。我将“内容分解”设置为“附件”。它的工作非常好是Firefox。但是在IE8中,它显示为内联。有什么快速的指示可以解决这个问题吗?
编辑:
我正在使用弹簧编写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();
解决方案 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作为附件。
其他提示
添加这些标题:
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从服务器下载文件。
我同意多路复用器。实际上的问题是,如果“文件名”不会以与Windows中的Acrobat Reader关联的后缀结束。一旦添加“ .pdf”,就可以了。
然后是 Cache-Control: no-cache
这将导致IE吐出。采用 Cache-control: private
防止缓存。
不隶属于 StackOverflow