私は大きなローカルファイルを持っています。 boto
ライブラリを使用して、そのファイルのgzippedバージョンをS3にアップロードしたいと思います。ファイルは大きすぎてアップロードする前にディスク上で効率的にgzipできないため、アップロード中にストリーミング形式でgzipする必要があります。botoを使ってs3にアップロード中にgzipする方法
boto
ライブラリでは、読み込むファイルのようなオブジェクトを期待する関数set_contents_from_file()
があります。
gzip
ライブラリは、fileobj
という名前のパラメータでオブジェクトを取得できるクラスGzipFile
を認識しています。圧縮時にこのオブジェクトに書き込みます。
私はこれらの2つの機能を組み合わせたいと思っていますが、1つのAPIはそれ自体で読み込みたい、もう1つのAPIはそれ自身で書きたいと思っています。どちらも受動的な操作(書かれているか、そこから読み込まれているかのような)を知らない。
誰もがこれらをどのように組み合わせて作業するかについてのアイデアはありますか?
編集:私はどこに行くかを暗示していたので、私は1つの答えを受け入れましたが、同じ問題がある場合は、私自身の答え(以下も)が役立ちます。その中の複数の部分のアップロード
S3のアップロードが本当に価値の大きさを知っておく必要がありますか?これは、格納中のストリーミング圧縮を実行できないことを意味します。私はこれをチェックするつもりです。 – Alfe
boto-s3-バケットキーに 'set_contents_from_stream()'があります。そのストリーミングについてのヒントは、少なくとも可能であるはずですね、あなたは思いませんか? – Alfe
そのドキュメントから: 'ストリームオブジェクトはシークできず、合計サイズは不明です。 これは、 Content-SizeとContent-MD5をヘッダーに指定できないことを意味します。したがって、 アップロードの場合、MD5計算の遅延は回避されますが、アップロードされた データの完全性を確認できないという不都合があります。 – Alfe