it-swarm.com.de

Die beste Möglichkeit, mehrere Dateien von einem Browser aus hochzuladen

Ich arbeite an einer Webanwendung. Es gibt einen Ort, an dem der Benutzer Dateien mit dem HTTP-Protokoll hochladen kann. Zum Hochladen der Dateien können Sie zwischen der klassischen Steuerung für das Hochladen von HTML-Dateien und einem Java-Applet wählen. 

Das klassische Hochladen von HTML - Dateien ist nicht besonders gut, da Sie nur eine Datei gleichzeitig auswählen können. Es ist jedoch ziemlich schwierig, während des eigentlichen Uploads Fortschrittsanzeigen zu erhalten (schließlich habe ich sie mit einem Timer erhalten, der eine Fortschrittsanzeige mit abgerufenen Daten aktualisiert Server über einen Aufruf von AJAX). Der Vorteil: Es funktioniert immer.

Mit dem Java-Applet kann ich mehr tun: Mehrere Dateien gleichzeitig auswählen (sogar einen Ordner), Dateien komprimieren, echte Fortschrittsanzeige erhalten, Drag'n'Drop-Dateien auf das Applet ziehen usw.
ABER es gibt ein paar Nachteile: 

  • es ist ein Albtraum, damit es auf Mac Safari und Mac Firefox einwandfrei funktioniert (Dank Liveconnect).
  • die Benutzeroberfläche ist nicht genau die native Benutzeroberfläche, und manche Leute bemerken das 
  • das Applet ist nicht so ansprechend wie es sollte (es könnte mein Fehler sein, aber alles sieht für mich ok aus) 
  • es gibt Fehler in der Java-Klasse UrlConnection mit HTTPS. Daher verwende ich den üblichen HTTP-Client von Apache, um den eigentlichen HTTP-Upload durchzuführen. Es ist ein ziemlich großes Paket und verlangsamt den Download der JAR-Datei 
  • der allgemeine HTTP-Client von Apache hat manchmal Probleme, Proxys zu durchlaufen 
  • die Java-Laufzeit ist ziemlich groß

Ich habe dieses Java-Applet schon länger gewartet, aber jetzt habe ich alle Nachteile und denke darüber nach, eine komplett neue Komponente zum Hochladen dieser Dateien zu schreiben/zu kaufen. 

Frage

Wenn Sie die folgenden Anforderungen hatten:

  • laden Sie mehrere Dateien bequem über einen Browser über HTTP oder HTTPS hoch
  • komprimieren Sie die Dateien, um die Uploadzeit zu reduzieren
  • upload sollte auf jeder Plattform funktionieren, mit nativer Benutzeroberfläche
  • muss in der Lage sein, riesige Dateien, mindestens bis zu 2 GB, hochzuladen
  • sie haben keine Ahnung von der Technologie

Welche Technologie/Komponente würdest du einsetzen?


Bearbeiten: 

  • Drag'n'Drop von Dateien auf der Komponente wäre ein großer Vorteil.
  • Anscheinend gibt es viele Probleme im Zusammenhang mit Fehlern im Flash Player ( swfupload Bekannte Probleme ). Richtige Mac-Unterstützung und Upload über Proxies mit Authentifizierung sind Optionen, auf die ich nicht verzichten kann. Dies würde wahrscheinlich alle Flash-basierten Optionen ausschließen :-(.
  • Ich schließe alle HTML/Javascript-Optionen aus, da Sie mit dem klassischen HTML-Steuerelement nicht mehr als eine Datei gleichzeitig auswählen können. Wenn Sie mehrere Dateien in einem Ordner auswählen möchten, klicken Sie n-mal auf die Schaltfläche "Durchsuchen".
36

OK das ist meine Einstellung dazu

Ich habe ein paar Tests mit swfupload durchgeführt, und ich habe meine vorherigen Erfahrungen mit Java gemacht, und meine Schlussfolgerung lautet: Unabhängig von der verwendeten Technologie gibt es keine perfekte Lösung für Uploads im Browser : Sie werden am Ende immer mit Fehler beim Hochladen großer Dateien, beim Durchsuchen von Proxies, mit SSL usw.

ABER:

  • ein Flash-Uploader (a la swfupload) ist wirklich leicht, benötigt keine Autorisierung vom Benutzer und hat eine native Schnittstelle, die wirklich cool ist, meint ich
  • für einen Java-Uploader ist eine Autorisierung erforderlich. Sie können jedoch mit den vom Benutzer ausgewählten Dateien beliebige Aktionen ausführen (bei Bedarf auch Komprimierung genannt). Drag & Drop funktioniert problemlos. Seien Sie auf einige epische Fehler vorbereitet, die zwar debuggen.
  • Ich habe keine Änderung mit Silverlight spielen können, solange ich möchte, dass dies vielleicht die richtige Antwort ist, obwohl die Technologie noch recht jung ist. Ich werde diesen Beitrag bearbeiten, wenn ich die Gelegenheit habe, ein wenig zu spielen mit Silverlight

Danke für alle Antworten !!

Ich habe vor kurzem etwas in Silverlight implementiert.

Verwendet im Allgemeinen HttpWebRequest, um einen Datenblock an einen GenericHandler zu senden.

Beim ersten Beitrag werden 4 KB Daten gesendet. Auf dem zweiten Block schicke ich einen weiteren 4K-Block.

Wenn der zweite Block empfangen wird, berechne ich die Hin- und Rückfahrt zwischen dem ersten und dem zweiten Block, und so Wird der dritte Abschnitt wissen, dass er die Geschwindigkeit erhöht.

Mit dieser Methode kann ich Dateien beliebiger Größe hochladen und wieder aufnehmen.

Jeder Beitrag sende ich mit dieser Info:

[PARAMETER] [FILEDATA]

Parameter enthalten hier Folgendes: [Chunk #] [Dateiname] [Sitzungs-ID]

Nachdem jeder Chunk empfangen wurde, sende ich eine Antwort an mein Silverlight zurück, in der er sagt, wie schnell er gebraucht wurde, damit er jetzt einen größeren Chunk senden kann.

Ich kann meine Erklärung schwer ohne Code ausdrücken, aber so habe ich es gemacht.

Irgendwann werde ich kurz schreiben, wie ich das gemacht habe.

5
Gautam

Ich habe es noch nie mit Dateien mit einer Größe von 2 GB verwendet, aber der YUI File Uploader hat bei einem früheren Projekt ziemlich gut funktioniert. Sie könnten auch an diesem jQuery Plugin interessiert sein.

Das heißt, ich denke immer noch, dass das Java Applet der richtige Weg ist. Ich denke, Sie werden am Ende weniger Portabilität und Probleme mit der Benutzeroberfläche haben, als Sie erwarten, und Drag/Drop funktioniert hervorragend. Für das Protokoll verwendet Box.net ein Java-Applet für das schnelle Hochladen mehrerer Dateien.

5
slf

Es gibt eine Reihe kostenloser Flash-Komponenten, die mit der Möglichkeit zum Hochladen mehrerer Dateien von Nice existieren. Sie verwenden die ActionScripts-FileReference-Klasse mit einem PHP (oder was auch immer) Empfänger auf der Serverseite. Einige haben kürzlich mit dem Start von FP10 gebrochen, aber ich weiß mit Sicherheit, dass swfupload funktionieren wird :)

Hoffe das hilft!

3
adam

Was ist mit diesen beiden Jupload http://jupload.sourceforge.net/ Und Jumploader http: //jumploader.com/

Beide sind Java-Applets, aber beide sind sehr einfach zu bedienen und zu implementieren. 

2
Alos

was ist mit google gears ?

1
Thierry

Sie können auch mehrere Dateien mit HTTP-Formularen hochladen, wie Dave bereits angedeutet hat. Wenn Sie jedoch etwas anderes als HTTP und Javascript verwenden möchten, würde ich Flash stark in Betracht ziehen. Es gibt sogar einige bereits existierende Lösungen wie MultiPowUpload und bietet viele der Funktionen, die Sie suchen. Es ist auch einfacher, Fortschrittsinformationen mit einem Flash-Client zu erhalten als mit AJAX-Aufrufen von Javascript, da Sie etwas mehr Flexibilität haben.

0
Jay

Sie können das Apache Commons FileUpload-Paket überprüfen. Sie können mehrere Dateien hochladen, den Fortschritt des Uploads überwachen und vieles mehr. Weitere Informationen finden Sie hier:

http://commons.Apache.org/fileupload/
http://commons.Apache.org/fileupload/using.html

Viel Glück

0

Der einfachste Weg zum Hochladen von Dateien in Java ist die Bibliothek GOJFileUpload.jar

Hier ist das Tutorial zur gojfileupload-Bibliothek:

GOJFileUpload

Sie geben zwei Methoden

  • UploadFile (String-Dateipfad, ArrayList-Bildname, HttpRequest-Anforderung)
  • UploadFile (String-Dateipfad, ArrayList-Datenname, ArrayList Bildname, HttpRequest-Anforderung)

Sie geben Ihnen HashMap den gesamten Dateinamen zurück, den Sie nach dem Hochladen in den angegebenen Zielordner hochgeladen haben.

0
Tell Me How

Es gibt HTTP/HTTPS-Upload-Steuerelemente, die das Hochladen mehrerer Dateien ermöglichen. Hier ist einer von Telerik, den ich für solide und zuverlässig gehalten habe. Die neueste Version scheint die meisten, wenn nicht alle Ihre Funktionsanforderungen zu haben.

0
Dave Swersky