# Upload-Progressbar, wie machen? (JS)



## zepho (24. April 2008)

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.


----------



## chmee (24. April 2008)

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


----------



## TheClansman (24. April 2008)

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


----------



## zepho (24. April 2008)

@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?


----------



## chmee (24. April 2008)

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


----------



## Chaosengel_Gabriel (24. April 2008)

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!?


----------



## TheClansman (24. April 2008)

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


----------



## chmee (24. April 2008)

@theclansman : Habe nochmal n bissel gestöbert, ja, so ist es, und naja, so ist es 

mfg chmee


----------



## zepho (24. April 2008)

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*

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.


----------



## versuch13 (24. April 2008)

swfupload könnte das richtige für dich sein:

http://swfupload.org/


----------



## TheClansman (24. April 2008)

moin,

jepp, zepho, requests kannst du soviele losjagen, wie du willst... oder dein arbeitsspeicher voll iss, oder der server wegen DoS die grätsche macht 

das splitten einer datei würde aber trotzdem php machen, was ja aufm server läuft, wo die (ganze) datei ja erstmal hin muss ... 

Gruß
 Clansman


----------



## zepho (24. April 2008)

mit php bin ich vertraut, aber es macht ja keinen sinn eine große Datei die bereits hochgeladen ist auf dem server zu splitten um zu nochmal hochzuladen, oder? 

@versuch13: SWF upload ist TOP weißt du vll noch die lizenz des programms?


----------



## versuch13 (24. April 2008)

MIT License, auch unter MIT License erhältlich:

http://digitarald.de/project/fancyupload/

Das sind jetzt nur zwei mir bekannte, eventuell gibt es noch weitere Lösungen der Art.


----------



## TheClansman (24. April 2008)

zepho hat gesagt.:


> mit php bin ich vertraut, aber es macht ja keinen sinn eine große Datei die bereits hochgeladen ist auf dem server zu splitten um zu nochmal hochzuladen, oder?
> 
> @versuch13: SWF upload ist TOP weißt du vll noch die lizenz des programms?



namd 

klar das macht keinen sinn zepho... aber so is php nunmal ... serverseitig  ... ich wüsste keinen weg, eine datei per php auf dem client zu splitten und dann, wie auch immer hochzuladen, aber ich lasse mich gern eines besseren belehren. 

andererseits wär das ja schon ein recht großes sicherheitsleck, und würd angreifern tür und tor öffnen, um einfach mal ein paar images auf nen server ihrer wahl hochzupumpen.
von daher würde dann auch die existenz von max_filesize ad absurdum geführt^^

ich habs halt bei diversen kundeninterfaces mit dem "fakestatus" gelöst, so dass der kunde sieht "ah, da passiert noch was", wenn die anforderung so war, dass ein echter status verlangt wurde, hab ich mich fertigen scripts bedient. 

Gruß
 Clansman


----------



## ts230 (2. Mai 2008)

Hallo,
könntet ihr mir vielleicht sagen, wie ihr das gelöst habt? 
Danke für alle Antworten im Voraus


----------



## versuch13 (2. Mai 2008)

Sind doch Lösungen genannt worden. Oder stellst du dir etwas anderes vor?


----------



## ts230 (3. Mai 2008)

versuch13 hat gesagt.:


> Sind doch Lösungen genannt worden. Oder stellst du dir etwas anderes vor?


Ich habe mir SWFUpload angeschaut aber nirgends war eine Prograssbar.
Oder wie habt ihr es jetzt gelöst?Ich wäre für jede Antwort dankbar.


----------



## Chaosengel_Gabriel (5. Mai 2008)

Also ich suche bei hotscripts.com nach was passendem...

Aber da das, was meinen Vorstellungen entspricht mit CGI oder PERL geschrieben ist, habe ich massive Probleme beim implementieren


----------

