Upload und Download Monitor für AJAX mit Progressbar

Das XHR Objekt kann mit einer ProgressBar kommunizieren und den Fortschritt für Upload (Request) wie Download (Response) unabhängig voneinander monitoren

Hinweis: Serverseitig wird die hochgeladene Datei nicht gespeichert sondern einfach nur zurückgesendet. Somit kann das XHR-Objekt den Fortschritt beider Stream-Prozesse unabhängig voneinander darstellen.

Upload/Request - Sekunden
Download/Response - Sekunden
-

Serverseitig darf die Übertragung nicht mit Transfer-Encoding: chunked erfolgen. Das relevante Stück JavaScript sieht so aus:

    xhr.upload.onprogress = function(e) {
        if (e.lengthComputable) {
            document.getElementById('upload').value = (e.loaded / e.total) * 100;
        }
    };
    xhr.onprogress = function(e) {
        if (e.lengthComputable) {
            document.getElementById('download').value = (e.loaded / e.total) * 100;
        }
    };

Das serverseitige Script untenstehend

#!/usr/bin/perl

use strict;
use warnings;
use bytes;

binmode STDOUT;
binmode STDIN;

read(STDIN, my $binary, $ENV{CONTENT_LENGTH});

my @header = (
    'HTTP/1.0 200 OK',
);

push @header, "Content-Length: $ENV{CONTENT_LENGTH}";

print join("\r\n", @header), "\r\n\r\n$binary";

Für das serverseitige Script fiel die Wahl auf ein sogenanntes Non Parsed Header Script, was soviel heißt, daß die vom Script generierten HTTP Response Header vom Server nicht geparst werden sollen. Nur unter dieser Bedingung ist ein Downgrade auf HTTP/1.0 möglich womit die Response ohne den Server umkonfigurieren zu müssen, unkomprimiert gesendet wird. Aufgrund des Response Headers Content-Length ist auch dafür gesorgt, daß der Response Message Body am Stück gesendet wird, die Übertragung also nicht chunked erfolgt.


Die rein persönlichen Zwecken dienende Seite verwendet funktionsbedingt einen Session-Cookie. Datenschutzerklärung: Auf den für diese Domäne installierten Seiten werden grundsätzlich keine personenbezogenen Daten erhoben. Das Loggen der Zugriffe mit Ihrer Remote Adresse erfolgt beim Provider soweit das technisch erforderlich ist. @: Rolf Rost, Am Stadtgaben 27, 55276 Oppenheim, nmq​rstx-18­@yahoo.de