Frage

Ich habe versucht, einen „Download-Link“ zu implementieren und es neben einem meines Bericht Tisch legen, so dass Benutzer eine CSV-Datei herunterladen und öffnen Sie sich mit Anwendungen wie Excel.

Die Datensätze werden dynamisch generiert basierend auf der Abfrage gemacht durch die Nutzer.

So irgendwo in meinem Controller gibt es so etwas wie:

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

Dies funktioniert sowohl in FireFox & Chrome, aber nicht im Internet Explorer.

Wenn ich die Antwort-Header ausdrucken, fand ich, dass mehrere Header auf meine Antwort von web2py hinzugefügt wurden: ‚Läuft ab‘, ‚Cache-Control‘, etc ...

Und wenn ich entferne den 'Cache-Control' Header indem Sie folgendermaßen vorgehen:

del response.headers['Cache-Control']

Es funktioniert im Internet Explorer.

So ist es wie IE scheint Schwierigkeiten Umgang hat mit einer herunterladbaren Datei mit ‚Cache-Control‘ Set bestimmten Wert.

Nun, meine Frage ist:

  • Warum web2py fügen Sie diese Antwort-Header, implizit? und vielleicht ohne eine Möglichkeit sie zu deaktivieren?

  • Gibt es eine Nebenwirkung, wenn ich den 'Cache-Control' löschen Header auf diese Weise?

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Ich bin sicher nicht das, was Cache Control-Header werden / wurden gesendet werden, aber IE hat einen Bug mit heruntergeladenen Dateien wie Sie erleben.

Für IE, müssen Sie die Option Caching . Wenn IE laden Dateien (zum Beispiel Excel-Dateien), in Excel, es sie aus dem Cache-Verzeichnis lädt, also wenn Sie nicht cachen es nicht, Excel (oder Ihre andere app) fehl, die Datei zu laden.

Eric Law (MSFT) zum Thema: http://blogs.msdn.com/ieinternals/archive/2009/10/02/Internet-Explorer-cannot-download-over-HTTPS-when-no- cache.aspx

Update : Wenn Sie aber wollen einfach nur um den Download zu zwingen ... z nicht die Excel-Datei im IE-Fenster haben IE laden ... dann sollten Sie die vollständigen Header für die Befestigung setzen.

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

Andere Tipps

Ist der Download-Link mit HTTPS (SSL)? Wenn ja, dann kann IE das Herunterladen nicht behandeln, wenn es gesetzt ist zwischengespeichert werden. Dies ist ein bekanntes Problem mit dem IE.

Diese beantworten Ihre Frage nicht, sondern löst, ich hoffe, ursprüngliches Problem.

Ich würde nur Zeitstempel (etwas Einmaliges genug) in dem Query-String des Link zu CSV-Datei. Es half mir.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top