Sven Rautenberg: Ladevorgangsanzeige während PHP Dateiupload

Beitrag lesen

Moin!

  • Die hochgeladenen Daten werden irgendwo auf dem Server als temporäre Datei gespeichert

Das werden sie in der Tat. Bei PHP sind diese temporären Dateien schon fertig hochgeladen, wenn das Skript gestartet wird.

  • Ein Skript könnte die Größe der temporären Datei auslesen und ausgeben

Wenn das Skript dann noch weiß, wie groß die Datei insgesamt ist, wäre auch der Fortschritt anzeigbar.

  • Die Webseite könnte dieses Skript regelmäßig aufrufen und die Größe der bisher hochgeladenen Daten anzeigen(AJAX)

Das ist eben das Problem. Mit AJAX auf der Formularseite könnte zu Problemen führen, weil man sich da im Niemandsland befindet. Denn die alte Seite ist schon "ungültig", weil der Request für die neue Seite schon raus ist, und die neue Seite läßt noch auf sich warten, weil der Upload noch andauert.

Darf man auf einer Seite, die schon durch "onunload" durch ist, mit Javascript (und insbesondere mit komplexeren Objekten wie XMLHttpRequest) noch operieren? Ich würde es nicht versuchen wollen, auf die Idee käme ich gar nicht.

Der Punkt ist einfach: Der Browser weiß genau, wie groß die lokale Datei ist, und wieviel von den Formulardaten er schon zum Server geschickt hat. Warum zum Teufel kriegen die Browserhersteller dann keinen Fortschrittsbalken implementiert? Oder ist von denen noch nie einer auf diese Idee gekommen?

Gewiß: Jede Art von Umsetzung bedeutet, dass es tausend Benutzern (insbesondere aus der Fraktion uploaderstellender Nörgler) nicht gefällt, insbesondere optisch. Denen gefällt ja auch der Anmeldedialog für HTTP-Authentifizierung nicht.

Es sagt ja auch niemand, dass der Balken riesig groß werden muß - aber irgendwo einen Indikator für "Halte ein, mein User, ich bin tatsächlich noch am hochladen - es passiert tatsächlich etwas!" sollte doch mal drin sein. Und der sollte anders aussehen als das übliche "Tja, warten wir mal, ob und wann der Server was sagt...".

- Sven Rautenberg

--
"Love your nation - respect the others."