質問

サーバーから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 キャッシュを防ぐため。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top