我正在从服务器下载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 防止缓存。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top