Schrift
[thread]160[/thread]

Upload Statusanzeige: eine Statusanzeige realisieren



<< >> 2 Einträge, 1 Seite
Peddn
 2004-01-29 16:44
#1123 #1123
User since
2003-12-21
33 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo Leute,

ich hab ein Uploadskript geschreiben, das über ein Formular eine Datei übergeben bekommt und diese Datei dann an einer bestimmten Stelle auf dem Server abspeichert. Jetzt kann der Upload von z.B. 5MB bei einer 56k-Verbindung locker mal 15 min. dauern und die Anwender neigen dann gern dazu das ganze abzubrechen, weil sie denken, das die ganze Sache irgendwie danebengegangen ist oder so...
Ich hab das ganze jetzt mal provisorisch gelößt, indem ich beim abschicken ein neues Fenster öffne, das dem Benutzer mitteilt, das er bitte warten möge, bis der Upload fertig ist. Dieses fenster wird mit der vom dem Uploadskript generierten Bestätigungsseite dann automatisch wieder geschlossen...
Jetzt zum eigentlichen Thema:
Die datei wird mit folgender schleife
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  open DAT,">$fname" or die &fehler($!);

 # $fname enthält den Pfad der Datei
 # $file ist die übergebene Datei aus dem Formular
 # Dateien in den Binaer-Modus schalten
 binmode $file;
 binmode DAT;

 my $data;
 while(read $file,$data,10240)
 {
   print DAT $data;
 }
 close DAT;

auf dem Server gespeichert.
Meine Idee ist nun:

ich schreibe in dieser schleife die aktuelle Größe der Datei in z.B. eine Textdatei und lese diese Textdatei dann in dem "Bitte Warten"-Fenster durch ein zweites Skript aus, generiere daraus dann eine art Upload-Statusanzeige und aktualisiere das ganze per Javascript dan z.b. alle 5 Sek...
Was haltet ihr davon? Kann das funktionieren oder hat jemand ne bessere Idee?

Gruß,
Peddn
eisbeer
 2004-01-29 16:55
#1124 #1124
User since
2003-08-29
347 Artikel
BenutzerIn
[Homepage] [default_avatar]
So hätte ich dir das jetzt auch gesagt. So löst es z.B. auch
www.photocase.de.

1. in dieser schleife die grösse, bzw. die noch zu ladenden bytes
in eine DB oder eine File schreiben. Wenn du die Lösung mit der
Datei nimmst, benenne die Datei z.B. nach einer eindeutigen ID,
Session-ID wird schon kritisch, weil es kann ja sein, das ein Benutzer
mehrere Dateien gleichzeitig uploaden will. IP fällt deshalb auch weg.
Also ordne jedem Upload eine eindeutige Upload-ID zu. Dann sieht
die Datei am besten so aus: 1234567890987654321.prg
Das selbe natürlich mit einer DB, da brauchst du dann halt n unique Feld
für die ID
2. ein zweites script liesst anhand der Unique-ID den Forschritt aus
und errechnet, wie viele Bytes noch geladen werden müssen. Du kannst
ja auch die Geschwindigkeit schätzen, in dem du in deine File/DB den
Timestamp (am genauesten mit Time::Hires) der letzten while-read
iteration schreibst und dann einfach die geschwindigkeit mit dem jetztigen
timestamp abgleichst.

Achja: Du kanns natürlich auch nur alle 5 iterationen von der read-schleife
die File/DB updaten, vielleicht verbraucht das dann weniger resourcen und
zeit.
Die meisten PC Probleme befinden sich zwischen Bildschirm und Stuhl...
<< >> 2 Einträge, 1 Seite



View all threads created 2004-01-29 16:44.