IE で「ダウンロード リンク」が失敗する
-
22-09-2019 - |
質問
「ダウンロード リンク」を実装し、レポート テーブルの横に配置して、ユーザーが 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ファイルへのリンクのクエリ文字列にタイムスタンプ(何かユニークな十分な)を追加します。それは私のために役立っています。