Tücken im asynchronen Datei-Download

Zugriffe: 5093 starstarstarstarstarstarstarstarstarstar Bewertung:3,75 (4 Bewertungen) 17.11.2009

Gelegentlich kommt es vor, dass man über seine Webanwendung, Dateien zum Download bereitstellen möchte. Knifflig wird's allerdings dann, wenn AJAX mit im Spiel ist. In diesem Beitrag möchte ich kurz aufzeigen, über welches Problem man dabei stolpern kann.

AJAX-Anwendungen sind bekannt dafür, dass man bestimmte Prozesse zwischen Client und Server ablaufen lässt und dies in der Regel so gestaltet, dass der Client nicht unnötig in seiner Arbeit blockiert wird. Das Ganze ist als asynchroner Prozess bekannt.

Eine Datei zum Download anzubieten ist von der Sache her auch kein großes Problem: in der Regel wird hierzu ein Http-Handler bemüht, der den Filestream an den Ausgabestream des Response-Objektes übergibt. Über die AddHeader-Methode kann man angeben, dass die Datei zum Download bereitgestellt werden soll.

Soweit also alles kein Problem. Interessant wird es dann, wenn dem eigentlichen Download eine Anfrage zum Server vorausgeschaltet ist, um zum Beispiel zu erfassen, wie oft die Datei heruntergeladen wurde, der eigentlich Download der Datei aber im Callbackhandler initiiert wird. In diesen Fällen passiert im Internet Explorer folgendes:

hinweis

Dies ist dann doppelt ärgerlich, wenn die Webanwendung ihren Inhalt asynchron nach lädt. Bestätigt man nun die Warnmeldung des Internet Explorers, dann ist der ursprüngliche Content verworfen, da ein vollständiger Reload der Seite erfolgt. Wie kann man das Problem nun umgehen? Ganz klar - man liest sich die Informationen der Informationsleiste genau durch, wo es nämlich heißt:

 hilfe

Im Ergebnis bedeutet dies, im Fall der dem Download vorausgehenden Serverkommunikation muss diese synchron erfolgen, damit der Kontext der Verarbeitung nicht unterbrochen wird.

Beispiel: (Download einer einfache Textdatei - sampleDownload.txt)

synchron | asynchron

Die gleiche Problematik tritt auf, wenn innerhalb einer setTimeout-Anweisung ein Dateidownload angeboten wird. Ebenso ist klar, dass diese Problematik nur zutrifft, wenn der Download der Datei über Javascript veranlasst wird.


Neuen Kommentar verfassen

Bestätigungscode