Kann ich den stream hochladen einer Datei auf S3 ohne eine content-length-header?
Ich arbeite auf einem Rechner mit wenig RAM, und ich würde es gern hochladen, die dynamisch generiert werden (nicht von der Festplatte) - Datei in einem streaming-Weise zu S3. In anderen Worten, ich weiß nicht, die Größe der Datei, wenn ich den upload starten, aber ich werde es wissen am Ende. Normalerweise wird ein PUT request Content-Length-header, aber vielleicht gibt es einen Weg, um dieses, wie die Verwendung von multipart oder chunked content-type.
S3 kann die Unterstützung von streaming-uploads. Zum Beispiel finden Sie hier:
http://blog.odonnell.nu/posts/streaming-uploads-s3-python-and-poster/
Meine Frage ist, kann ich das gleiche erreichen, ohne dass die Datei anzugeben, die Länge an den Anfang des hochladen?
InformationsquelleAutor Tyler | 2011-12-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie zum hochladen Ihrer Datei im 5MiB+ Brocken über S3-multipart API. Jedes dieser Stücke erfordert eine Content-Länge, aber Sie können vermeiden, laden von großen Datenmengen (100MiB+) in den Speicher.
S3 können bis zu 10.000 teilen. So, indem Sie einen Teil-Größe 5MiB Sie hochladen können, um dynamische Dateien von bis zu 50GiB. Sollte genug für die meisten Einsatz-Fälle.
Jedoch: Wenn Sie mehr benötigen, erhöhen Sie Ihre Teil-Größe. Entweder durch Verwendung einer höheren Teil-Größe (10MiB zum Beispiel) oder durch die Erhöhung es während des Uploads.
Dies ermöglicht es Ihnen zum hochladen von Dateien von bis zu 1 TB (S3-limit für eine einzelne Datei ist 5 TB jetzt) ohne Speicher zu verschwenden unnötig.
Ein Hinweis auf Ihre link zu Sean O'Donnells blog:
Sein problem ist, Verschieden von Ihnen - er kennt und nutzt die Content-Length, bevor Sie den upload. Er will zur Verbesserung dieser situation: Viele Bibliotheken Griff uploads laden Sie alle Daten aus einer Datei in den Speicher. In pseudo-code, das wäre so etwas wie dieses:
Seine Lösung ist es, indem Sie die
Content-Length
über das filesystem-API. Er dann streamt die Daten von der Festplatte in den request-stream. In pseudo-code:Eine java-Implementierung, die in dieser form von einem Ausgabestrom besteht in s3distcp github.com/libin/s3distcp/blob/master/src/main/java/com/amazon/...
Ich habe ein open-source-Bibliothek widmet sich dieser in github.com/alexmojaki/s3-stream-upload
Wo hast du die 5MiB limit???
href="http://docs.aws.amazon.com/AmazonS3/latest/dev/qfacts.html" >docs.aws.amazon.com/AmazonS3/latest/dev/qfacts.html
InformationsquelleAutor Marcel Jackwerth
Setzen diese Antwort hier für die anderen, falls es hilft:
Wenn Sie nicht wissen, die Länge der Daten, die Sie streaming bis S3 verwenden, können Sie
S3FileInfo
und seineOpenWrite()
Methode zu schreiben, die beliebige Daten in S3.nicht die Länge von "Hello world" bekannt? funktioniert es, wenn der Eingang ist ein stream???
S3FileInfo eigentlich Puffern den gesamten Strom, bevor Sie seinen Inhalt..
InformationsquelleAutor mwrichardson
Können Sie die gof3r Befehl-Linie Werkzeug, um einfach streamen linux-Rohre:
InformationsquelleAutor webwurst
Beziehen sich mehr auf HTTP multipart-enitity-Anfragen. Sie können senden Sie eine Datei als Datenblöcke an das Ziel.
InformationsquelleAutor Kris
Wenn Sie mit Node.js Sie können verwenden Sie eine plugin wie s3-streaming-upload um dies zu erreichen ganz einfach.
InformationsquelleAutor nathanpeck