質問

「ダウンロード リンク」を実装し、レポート テーブルの横に配置して、ユーザーが CSV ファイルをダウンロードして Excel などのアプリケーションで開くことができるようにしようとしていました。

レコードは、ユーザーが行ったクエリに基づいて動的に生成されます。

したがって、コントローラーのどこかに次のようなものがあります。

response.headers['Content-Type'] = 'text/csv'
response.headers['Content-Disposition'] = 'attachment; filename=xxx.csv'
return response.stream(dynamically_generated_csv, request=request)

これは FireFox と Chrome の両方で機能しますが、IE では失敗します。

応答ヘッダーを出力すると、web2py:'Expires'、'Cache-Control' などによっていくつかのヘッダーが応答に追加されていることがわかりました。

そして、次のようにして「Cache-Control」ヘッダーを削除すると、次のようになります。

del response.headers['Cache-Control']

IEでは動作します。

そのため、IE は、「Cache-Control」が特定の値に設定されているダウンロード可能なファイルの処理に問題があるようです。

さて、私の質問は次のとおりです。

  • なぜ web2py はこれらの応答ヘッダーを暗黙的に追加するのでしょうか?そしておそらくそれをオフにする方法がないでしょうか?

  • この方法で「Cache-Control」ヘッダーを削除すると副作用はありますか?

前もって感謝します。

役に立ちましたか?

解決

どのようなキャッシュ コントロール ヘッダーが送信されているかはわかりませんが、IE には、あなたが経験しているようなダウンロード ファイルに関するバグがあります。

IE の場合、キャッシュを有効にする必要があります. 。IE がファイルをロードするとき (例:Excel ファイル)、Excel ではキャッシュ ディレクトリからファイルが読み込まれるため、キャッシュしないと Excel (または他のアプリ) はファイルの読み込みに失敗します。

Eric Law (MSFT) のトピックについて: http://blogs.msdn.com/ieinternals/archive/2009/10/02/Internet-Explorer-cannot-download-over-HTTPS-when-no-cache.aspx

アップデート:ただし、ダウンロードを強制したいだけの場合は...例えばIE ウィンドウ内に Excel ファイルを IE に読み込ませないでください...次に、必ず添付ファイルの完全なヘッダーを設定してください。

//PHP style
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="downloaded.pdf"');

他のヒント

はHTTPS(SSL)を使用して、ダウンロードリンクですか?もしそうなら、キャッシュされるように設定されています場合、IEは、ダウンロードを処理することはできません。これはIEの既知の問題です。

これはあなたの質問に答えていませんが、解きが、私は、元の問題を願っています。

私は、CSVファイルへのリンクのクエリ文字列にタイムスタンプ(何かユニークな十分な)を追加します。それは私のために役立っています。

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