IE8の問題:PDFファイルはインラインとして表示されます
-
29-09-2019 - |
質問
サーバーからPDFをダウンロードしています。 「コンテンツディスポジション」を「添付ファイル」として設定します。その非常にうまく機能するのはFirefoxです。しかし、IE8では、インラインとして表示されます。この問題を解決するための簡単なポインターはありますか?
編集:
スプリングを使用して、PDFバイト配列ストリームを書き込みます。クライアント側のJSPを使用して表示します。
クライアント側:
DHTMLグリッドを使用してタグを保持しています。グリッド内のコードは次のように見えます。
<a href='javascript:viewPDF(14)' target="_self" >View</a>
これをクリックすると、Method 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
私は何が問題だったのかを理解するために一日を費やしました。しかし、ついに私はそれを手に入れました。
言えない エヴァン・ムラウスキー間違った答え。私は彼のコードでさえ試しました。しかし、助けはありません。最後に、ファイル名拡張子が欠落していることがわかりました。 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を添付ファイルとして取得しています。
他のヒント
これらのヘッダーを追加します:
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
これにより、インターネットエクスプローラーがサーバーからファイルをダウンロードするように強制されます。
Multiplexerに同意します。実際、問題は、「ファイル名」がWindowsのAcrobat Readerに関連付けられている接尾辞で終わらない場合です。 「.pdf」を追加するとすぐに動作します。
それからのピトファルがあります Cache-Control: no-cache
IEが吐き出されます。使用する Cache-control: private
キャッシュを防ぐため。