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來防止緩存。