Seite 1 von 1
Partieller HTTP File Upload
Verfasst: Dienstag 5. August 2008, 09:55
von fbuchinger
Ich möchte einen serverseitigen Metadaten-Extraktor implementieren, bei dem der User Dateien hochlädt und die entsprechenden Metadaten angezeigt bekommt.
Da Metadaten üblicherweise im Fileheader stehen, würde es reichen, nur die ersten x Kbytes einer Datei hochzuladen, dann den Upload abzubrechen und die Auswertung zu beginnen.
Wie kann ich einen solchen partiellen Upload implementieren?
Verfasst: Dienstag 5. August 2008, 10:15
von jens
Interessante Frage. Ich weiß nicht genau, aber IMHO geht das mit normalen http nicht. Der Browser sendet und sendet, bis alles da ist, auch wenn der Server schon längst "abgebrochen" hat.
Verfasst: Dienstag 5. August 2008, 11:53
von Dauerbaustelle
Das geht bestimmt mit Java-Applets *duck*
Verfasst: Dienstag 5. August 2008, 14:51
von veers
jens hat geschrieben:Interessante Frage. Ich weiß nicht genau, aber IMHO geht das mit normalen http nicht. Der Browser sendet und sendet, bis alles da ist, auch wenn der Server schon längst "abgebrochen" hat.
Nö tut er nicht. Sobald der Socket geschlossen wurde wird auch der Browser aufhören zu senden - wohin auch. Wenn du das in ein unsichtbares iframe lenkst könnte es funktionieren

Partieller HTTP File Upload
Verfasst: Dienstag 5. August 2008, 16:28
von fbuchinger
Danke für Euer Feedback. Ich habe schon ein paar Java-Uploader getestet, aber out of the box beherrschte keiner mein gewünschtes Feature. Zudem ist die JRE-Installationsbasis nicht so groß.
@veers: kannst du mir auch ein paar Tipps zur Umsetzung der Server-Komponente geben?
Verfasst: Dienstag 5. August 2008, 16:40
von veers
Mit einem CGI würde das etwa so laufen:
Die ersten N bytes von stdin lesen
Die Datenverarbeiten, Resultat in Session speichern
exit(0)
Das Problem:
Je nach dem brauchst du für die Metadaten auch das Ende der Datei (bei gewissen formen von id3 zum Beispiel).

Verfasst: Dienstag 5. August 2008, 20:34
von mitsuhiko
wsgi definiert nicht wirklich was du mit dem input stream machen darfst, aber schließen darfst du den glaub ich nicht. Webbrowser reagieren auch eher mit fehlern auf sowas.
Verfasst: Dienstag 5. August 2008, 20:45
von veers
mitsuhiko hat geschrieben:wsgi definiert nicht wirklich was du mit dem input stream machen darfst, aber schließen darfst du den glaub ich nicht. Webbrowser reagieren auch eher mit fehlern auf sowas.
Machen sie, aber die sind im unsichtbaren IFrame ja nicht sichtbar.
Verfasst: Mittwoch 6. August 2008, 08:33
von sma
Ich würde sagen, dass man als Server alles einlesen (aber nicht speichern) muss, wenn es auf dem Client nicht zu Fehlern kommen soll. Ein signiertes (!) Java-Applet könnte eine lokale Datei direkt im Browser einlesen und dabei bereits die Logik implementieren, die da im Server sein soll und so den ganzen Upload einsparen. Eine weitere Alternative wäre eine Flash-Anwendung, die nicht extra signiert werden muss, aber auch auf Dateien zugreifen darf, die der Anwender ihr per File-Open-Dialog zeigt. Ich meine, dann kann man diese Datei in ein ByteArray-Objekt einlesen und verarbeiten, ebenfalls wieder ohne die Notwendigkeit, alles hochzuladen.
Stefan
Verfasst: Mittwoch 6. August 2008, 12:09
von fbuchinger
Ich habe eine ganze Weile versucht, das ganze über Java-Applets bzw. Flash-Uploader zu lösen. In Flash wird sowas erst mit dem Flash Player 10 möglich sein, und selbst da ist es nicht ganz sicher ob nicht sicherheitstechnisch ein Riegel vorgeschoben wird.
Momentan müht sich ja das z.B. SWFUpload-Team ziemlich ab, mit den ganzen Sicherheitseinschränkungen des Flash Player 10 fertig zu werden. Java ist bei weitem nicht so verbreitet und es gibt noch kein Applet, das partielle Uploads out-of-the box beherrscht.
Nachdem das Thema auf reges Interesse stösst, würde ich mich über Codeschnipsel zu einer reinen HTML-Lösung (FORM im hidden iFrame) sehr freuen.
Das Upload-Skript von Werkzeug wäre ja eine gute Ausgangsbasis:
http://dev.pocoo.org/projects/werkzeug/ ... /upload.py