1

私は自分のサーバーからPDFをダウンロードしています。私は「Content-Disposition」を「attachment」と設定しました。非常にうまく動作するのは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

私は問題が何かを理解するために1日を費やしました。しかし、ついにそれを得ました。

私はエヴァン・ムラウスキーの答えが間違っているとは言えません。彼のコードを試してみました。しかし助けなし。最後に、ファイル名拡張子が見つからないことがわかりました。私はtestfileに.pdfを追加しました。

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 

は、これは、サーバーからファイルをダウンロードするには、Internet Explorerを強制します。

+0

'+ 1'私はユーザーがコンテンツを強制している間は最初の3行を使用し、問題なく動作しました。 –

+0

私はすべてのヘッダーを含めましたが、依然として私は問題に直面しています。 –

+0

@Multiplexer:あなたの質問にダウンロードをトリガするために使用しているコードを投稿できますか? –

1

私はマルチプレクサに同意します。 実際問題は、 'filename'がWindowsのAcrobat Readerに関連付けられている接尾辞で終わらない場合です。 「.pdf」を追加するとすぐに問題なく動作します。

それでは、IEが腐ってしまう原因となるCache-Control: no-cacheのピットファールがあります。 Cache-control: privateを使用してキャッシュを防止します。

関連する問題