1

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

编辑:

我使用弹簧来写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

我花了一天的时间找出问题所在。但最后我明白了。

我不能说埃文穆拉夫斯基的回答是错误的。我甚至用他的代码尝试过。但没有帮助。最后我发现文件扩展名缺失。我只是将.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

添加这些标题:

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 

这将迫使IE浏览器从服务器上下载文件。

+0

`+ 1`每当我向用户强制内容并且他们的工作没有问题时,我都会使用前三行。 – 2010-11-29 13:20:15

1

我同意Multiplexer。 其实问题是,如果'文件名'不以在Windows中与Acrobat Reader关联的后缀结尾。只要添加“.pdf”,它就可以正常工作。

然后theres的Cache-Control: no-cache这将导致IE呕吐。 使用Cache-control: private来防止缓存。