Die Anatomie des Hochladens

8

Ich frage mich, was ist der allgemeine Konsens für das Hochladen von mäßig großen Dateien. Ich habe eine Web-App, und jedes Mal, wenn ein Benutzer eine Datei hochlädt (normalerweise größer als 5 MB), neigt der Webserver dazu, zu hängen, bis der Datei-Upload beendet ist.

Das oben genannte scheint normal, da ein einzelner Upload einen einzelnen HTTP-Request-Handler beanspruchen kann. Berücksichtigen Webentwickler das und entweder:

a) Bezahlen Sie mehr HTTP-Handler

b) Verwenden Sie eine andere Methode, um dies zu umgehen, indem Sie AJAX oder einen anderen Ansatz verwenden

Ich habe gehört, dass es ziemlich normal ist, dass Web-Apps ein paar HTTP-Request-Handler haben, die sich darum kümmern, was ziemlich viel mehr kostet. Auf der anderen Seite, wenn die Kosten ein Problem darstellen, haben einige vorgeschlagen, direkt über Flash + AJAX direkt auf den Webserver oder den Speicherdienst (d. H. Amazon S3) zu laden. Die letztere Methode benötigt ein bisschen Scripting und ist ein bisschen unordentlich.

Meine zweite Sorge:

Mit Ajax zum Hochladen von Dateien auf einen Server. Nimmt dies noch einen ganzen HTTP-Request-Handler auf? d. h. bleibt der Server hängen, bis der Upload abgeschlossen ist?

Auch mit Flash müsste ich noch eine URL angeben, zu der ich hochladen möchte. Die URL wäre eine der Aktionen meines Controllers. Das würde bedeuten, dass die Verarbeitung immer noch auf der Serverseite stattfindet. Ist das soweit richtig?

Ich habe nachgedacht. Wenn ich andererseits eines der Upload-Skripts (plupload, uploadify, swfupload usw.) verwenden würde, um direkt auf Amazon S3 hochzuladen, wird die Verarbeitung auf dem S3-Server anstelle des lokalen Webservers ausgeführt. Welche hängen die Web-App überhaupt nicht auf. Verstehe ich das richtig?

Möchten Sie Ihr Feedback hören.

    
Christian Fazzini 24.02.2011, 06:46
quelle

4 Antworten

0

Danke für die bisherigen Antworten.

Leider unterstützt unser Host Heroku keine blockierungsfreien, ausgeglichenen Server. Ich habe auch Flash + Javascript-basierte Uploader wie SWFUpload, Uploadify versucht. Einige Variationen der erwähnten Plugins haben funktioniert, andere nicht. Ich habe unzählige Stunden mit Versuch und Irrtum verbracht, aber ich fand es nicht gut, wie der Code in meine Rails-App integriert wurde.

Am Ende ging es mit dem manuellen Hochladen der Datei auf S3 direkt nach diesem Link . Dies ermöglicht auch eine Rückmeldung vom S3-Server, um uns mitzuteilen, dass ein Upload erfolgreich war, indem wir den Pfad zur hochgeladenen Datei angeben, sodass wir dann einen Hintergrundjob (über redis + resque) erstellen können, um die Datei zu verarbeiten >     

Christian Fazzini 28.02.2011, 12:07
quelle
1

Für große Uploads sollten Sie non-blocking, evented Server wie Node.js, Twisted on Pyhon, AnyEvent für Perl oder EventMachine für Ruby. Das Verwenden des Threads-für-Verbindung-Modells ist einfach zu teuer für lange laufende Verbindungen.

Es ist nicht ungewöhnlich, dass Node.js-Benutzer so viele gleichzeitige Verbindungen haben, dass sie tatsächlich die Grenzen ihres Betriebssystems erreichen, während sie noch immer nicht alle ihre Ressourcen nutzen - siehe zum Beispiel diese frage wurde von jemandem gestellt, der besorgt war, nur 30 tausend gleichzeitige verbindungen zu haben und dann verwaltet um über 60.000 Verbindungen auf einem einzelnen Server mit 4 GB RAM zu erreichen.

Wenn Sie Bedenken haben, dass Ihre Verbindungen Ihren Server davon abhalten, neue Anfragen zuzustellen, sollten Sie keinen blockierenden Server verwenden.

    
rsp 24.02.2011 06:56
quelle
0

Ich entwickle gerade eine Web-App, die mehrere Bild-Uploads gleichzeitig durchführt. Ich recherchierte weit und breit und die beste Option, die ich fand, war swfupload . Es ist super einfach zu implementieren und hochgradig anpassbar. Benutzer können mehrere Dateien aus dem Dialogfeld auswählen, sie zu einer Warteschlange hinzufügen und aktuelle Fortschrittsrückmeldungen vom Browser erhalten. Diese Verzögerung ist für den Benutzer keine große Sache.

Obwohl, bah ..... es verwendet Flash, um die Dialogbox zu initialisieren, aber alles andere wird mit gutem altem Javascript gehandhabt.

Ein gutes Arbeitsbeispiel ist carbonmade.com

    
Richard Calahan 24.02.2011 06:57
quelle
0

Wenn Sie in Zukunft direkt über Rails auf S3 uploaden wollen, schauen Sie sich meine Beispielprojekte an. Sie werden sich viele, viele Kopfschmerzen ersparen und es ist nicht sehr "chaotisch":)

Beispielprojekt mit Rails 3, Flash und MooTools-basiertem FancyUploader zum direkten Upload in S3: Ссылка

Beispielprojekt mit Rails 3, Flash / Silverlight / GoogleGears / BrowserPlus und jQuery-basiertem Plupload zum direkten Upload auf S3: Ссылка

Übrigens können Sie Post-Processing mit Paperclip mit etwas wie diesem Blog-Post beschreibt:

Ссылка

    
iwasrobbed 27.05.2011 17:34
quelle

Tags und Links