1

サーバーからPDFをダウンロードしています。「Content-Disposition」を「attachment」に設定しました。その非常にうまく機能しているのはFirefoxです。しかし、IE8ではインラインとして表示されます。この問題を解決するためのクイックポインタはありますか?

編集:

私はSpringsを使用して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();
4

3 に答える 3

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

これにより、InternetExplorerはサーバーからファイルをダウンロードするように強制されます。

于 2010-11-29T13:14:11.613 に答える
2

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

エヴァン・ムラフスキーの答えが間違っているとは言えません。私も彼のコードで試しました。しかし、助けにはなりません。最後に、ファイル名拡張子が欠落していることがわかりました。テストファイルに.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を添付ファイルとして取得しています。

于 2010-12-02T11:16:52.620 に答える
1

マルチプレクサに同意します。実際の問題は、「ファイル名」がWindowsのAcrobatReaderに関連付けられているサフィックスで終わっていない場合です。「.pdf」を追加するとすぐに問題なく動作します。

次に、その落とし穴がCache-Control: no-cacheIEに吐き気を催させます。Cache-control: privateキャッシュを防ぐために使用 します。

于 2011-10-04T09:26:21.263 に答える