Upload-Progressbar, wie machen? (JS)

zepho

Grünschnabel
Zuerstmal: "HALLO" ;)

ich bin der NEUE,

Hintergrund

Ich habe einen Shop realisiert, und möchte nun das Sichern und Einspielen von Einstellungen/Sortiment & Co. realisieren. Allerdings geben sich dadurch Uploadzeiten von bis zu 50 sek. (dsl / 768 Kbits, partitieller Upload), Deswegen will ich einen Progessbar für uploads einfügen, damit der User nicht "nervös" wird.

Durch googlen habe ich herausgefunden, dass ich meinen "Balken" über PHP mit Meta-Refreshes (was ich für zweifelhaft und weniger vorteilhaft halte) oder über JS realisieren kann.

Ich möchte das Ganze gerne selber schreiben, da mein JS noch nicht so gut ist und ich durch das verwenden von fertigen Scripten nichts lerne.

Problem konkret

Wie kann ich in JS herausfinden was übertragen wurde? Welche Werte kann ich diesbezüglich in JS ermitteln? (Übertragungsrate, Dateigröße, übertragenen Daten?)

Ich danke euch für eure Antworten.
 
Soweit ich weiss, kann man mittels JS solcher Werte NICHT ermitteln, ergo auch keine genaue Progressbar. Allerdings könnte man den Download in Häppchen unterteilen, dann beispielsweise bei 10 Teildateien einen Verlauf zeigbar machen.

Bei einem Upload scheint es ein bissel "einfacher" zu sein, da Du mit JS clientseitig die filesize erfahren kannst, und dann per php die Filegröße der erstellten Datei auslesen kannst.

mfg chmee

**EDIT** Hier Links:
http://www.learntechnology.net/content/ajax/ajax_upload.jsp
http://www.dynamicdrive.com/forums/archive/index.php/t-7676.html
http://www.kevlindev.com/dom/progress/index.htm
 
Moin,

ich bin dann wohl der andere Neue ;)

Also einen richtigen Statusbalken mit JS zu machen, geht wirklich nicht. Du könntest den höstens faken, in dem du per AJAX ein uploadscript anquatschst und während der Laufzeit des Scripts (bis 200 vom Server zurückkommt) eine Animation zeigst.

PHP selbst gibt nicht zurück, wieviel hochgeladen wurde (leider), aber es gibt relativ leicht anzupassende uploadscripts in cgi/perl, die man für den zweck verwenden kann.

Gruß
Clansman
 
@chmee:
ich würde diese Forschrittsanzeige NUR für Uploadgeschichten verwenden, da in den meisten Browsern heute eine Downloadmanager eingebaut ist.

Mir kommt da aber gerade eine Idee. Da ich anscheinden ohnehin AJAX verwenden muss; Kann man den Upload auch splitten? Zwar weiß ich wie ich das in PHP machen könnte, aber bei einem Upload müsste das ja auf JS seite geschehen, oder?

Bei einem Upload scheint es ein bissel "einfacher" zu sein, da Du mit JS clientseitig die filesize erfahren kannst, und dann per php die Filegröße der erstellten Datei auslesen kannst.

Tja das habe ich mir aus gedacht, aber der Interpreter startet erst nach dem Upload. oder meinst du wieder üder AJAX? Da müsste ich doch dann mit shared Memory arbeiten, da doch die Datei auf vielen System erst erstellt wird, nachdem der Upload abgeschlossen ist, also die ganze Datei auf dem Server liegt. Mir wurde das so zu verstehen gegeben: "Der Virenscanner könne seine Heurisitk nicht anwenden, wenn du 'direkt' auf die Platte schreiben würdest, deshalb wird in einen Zwischenspeicher geladen und dort geprüft und dann die ganze Datei ins ensprechende Verzeichnis kopiert, meist ein Temporäres".

Wie seht ihr das?
 
Upload = Verlagern von Client zu Server, oder ?
Auf dem Server ( angegebener Ordner ) findet doch nix Derartiges statt ?! Ich denke schon, dass man per php "echo filesize();" und httprequests herausfinden kann, wieviel schon auf dem Server liegt und das ins Verhältnis zu der vollständigen (Client)Datei setzt. Dann läuft der request eben so lange, bis das Verhältnis 99% überschritten hat.

mfg chmee
 
Ich bin zwar kein Neuer mehr, aber mit dieser Problematik beschäftige ich mich auch, da ich es grade für größere Uploads sehr praktisch finde...

Ich glaube man sollte in der Gedankenrichtung ansetzen, wie es andere Upload-Sites realisiert haben?
Denn soziemlich JEDER File-Hoster blendet solche Balken ein, während des Uploads...

Ich hab aber irgendwie das Gefühl, dass sowas die mir bekannten Techniken übersteigt,. sodass das selber schreiben eines solchen Skripts das erlernen einer neuen Sprache erfordern würde...

Daher denke ich wäre die einfachste Frage, in meinem Fall, wo kann ich mir was entsprechendes downloaden!?
 
aloha,

problem der sache ist allerdings, dass du mit JS keinen zugriff auf dateiebene hast, also lässt sich nicht rausfinden, wie groß die datei ursprünglich ist.
zudem wird die per php hochgeladene datei zuerst in deinem temp-ordner abgelegt, unter einem zufälligen namen, das machts schwierig die datei zum auslesen der größe anzufassen.
Erst bei erfolgreichem upload wird die datei ins letzendliche zielverzeichnis verschoben.

edit:
@gabriel

wie ich schon im vorangegangenen post schrieb, gibts da pearl bzw cgi scripte, die eben genau das können. zu finden sind die zumeist auf den einschägigen "fertigscript"-seiten wie hotscripts.com

cu
Clansman
 
Zuletzt bearbeitet:
@theclansman : Habe nochmal n bissel gestöbert, ja, so ist es, und naja, so ist es :)

mfg chmee
 
Also wie gesagt, will ich lernen, und ich denke ich werde mir mal einschlägige Skripts näher ansehen. Vielen vielen Dank für euer Antworten, das hier scheint ne gute Community zu sein *wohlfühl*:p

Zu partiellem upload:

Da man meines Wissens nach mit AJAX/JS mehrere Request losschicken kann, müsste ein partiteller Upload doch auch möglich sein. Kann man den irgendwie eine zum Upload ausgewählte Datei automatisch splitten lassen? So ließe sich toll die Max_upload_size umgehen bzw. beachten.
 

Neue Beiträge

Zurück