4

リクエストのいくつかのパラメーターに基づいて、応答に対してオンザフライで PDF を作成するサーブレットがあります。このファイルを IE で開いたりダウンロードしようとすると、次のメッセージが表示されます。

「[サイト] から [ファイル名] をダウンロードできません。このインターネット サイトを開くことができません。要求されたサイトは利用できないか、見つかりません。後でもう一度試してください。」

これは私が応答に設定したものです:

response.setHeader("Content-Disposition", "attachment;filename=" + title + ".pdf");

response.setContentType("application/pdf");

他のブラウザではすべて正常に動作しています。

アップデート:

添付ファイルの代わりにインラインで試しました。これにより、開く/保存ダイアログの代わりに新しいウィンドウが開きます (ダイアログが必要です)。エラー メッセージは表示されなくなりますが、新しいウィンドウは IE では空です。まだ他のブラウザで動作しています。

エスケープされていない文字を含まない、ファイル名の周りに単純な二重引用符なしを試しました。二重引用符と引用符なしでは違いはありませんが、ファイル名に単一引用符が追加されます。もちろん、これは望ましくありません。

ファイル名にエスケープされていない文字が含まれていません。

このページのテストを確認しました。ファイル名付きの引用符なしの添付ファイルがすべてのブラウザーに渡されることが示されています。これは最初から使われていたものです。

Content-Length ヘッダーを追加しても違いはありません。

ちなみに、フライングソーサーはPDFの作成に使用されています。

4

5 に答える 5

3

http://greenbytes.de/tech/tc2231/をご覧になることをお勧めします。これには、さまざまなブラウザーがContent-Dispositionヘッダーのさまざまな値でどのように動作するかについて、多数のテスト ケースがリストされています。私の推測では、titleエスケープする必要があるスペースまたはその他の特殊文字が含まれており、IE は現在、エスケープされていない値をバーフィングしています。

于 2012-09-27T15:46:54.687 に答える
2

次のヘッダーを試してみましたか:

response.setHeader("Content-Length", lenght);
response.setHeader("Content-Disposition", "inline; filename='" + filename + "'");

ファイル名はエスケープする必要があります。

于 2012-09-27T15:50:48.927 に答える
2

しばらく経ちましたが、解決策が見つかったので、これを更新する必要があると考えました。

使用中の CMS は、最初は考慮していなかったいくつかのヘッダーを追加していました。

  • キャッシュ制御: プライベート
  • プラグマ: no-cache

キャッシュがない場合、IE のダウンロードに問題があるようです。これらのヘッダーは CMS のアップグレードで変更され、問題は解決しました。

例:

  • キャッシュ コントロール: パブリック、最大年齢 = 31536000
  • 日付: 2012 年 12 月 6 日 (木) 14:14:14 GMT
  • 有効期限: 2013 年 12 月 6 日 (金) 14:14:14 GMT
于 2013-09-25T13:56:23.830 に答える
1

私は同じ問題を抱えていました.IEは応答コード201を処理しません(他のすべてのブラウザはそれを処理します)。200に変更すると、IEはファイルを正常にダウンロードしました。

この投稿は私を正しい方向に向けました。

于 2013-05-31T21:15:47.810 に答える
0

以下のコードにより、IE ブラウザで PDF を表示できます。response.setHeader("Content-Disposition", "attachment;filename=" + title + ".pdf");

どうもありがとう。

于 2014-11-24T06:38:39.020 に答える