6

ユーザーが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で動作します。

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

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

  • なぜweb2pyはこれらの応答ヘッダーを暗黙的に追加するのですか? そして、それを引き立たせる方法がないのでしょうか?

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

前もって感謝します。

4

3 に答える 3

5

どのキャッシュ コントロール ヘッダーが送信されているか、または送信されていたかはわかりませんが、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がIEウィンドウ内にExcelファイルをロードしないようにする場合は、添付ファイルの完全なヘッダーを必ず設定してください。

//PHP style
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="downloaded.pdf"');
于 2010-01-04T15:10:03.340 に答える
2

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

于 2010-01-04T15:04:32.443 に答える
0

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

CSV ファイルへのリンクのクエリ文字列にタイムスタンプ (十分に一意のもの) を追加するだけです。それは私にとって役に立ちました。

于 2010-01-04T14:56:07.580 に答える