5

Amazon S3 を使用して、動的に生成されたファイルを S3 に配布しています。

ローカルサーバーで使用できます

destination = open(VIDEO_DIR + newvideo.name, 'wb+')

生成されたビデオを場所 VIDEO_DIR.newvideo.name に保存します

VIDEO_DIR を S3 エンドポイントの場所に変更する実行可能な方法はありますか。では、動的に生成されたビデオを S3 サーバーに直接書き込むことができるのでしょうか?

別の質問は、オブジェクトを S3 に直接書き込む実行可能な方法はありますか? たとえば、chunklet=Chunklet()このチャンクレット オブジェクトを S3 サーバーに直接書き込む方法は?

これを行うには、最初にローカル ファイルを作成し、S3 API を使用します。例えば、

mime = mimetypes.guess_type(filename)[0]
k = Key(b)
k.key = filename
k.set_metadata("Content-Type", mime)
k.set_contents_from_filename(filename)
k.set_acl('public-read')

でも効率は上げたい。パイソンが使われています。

4

2 に答える 2

4

botoライブラリを使用して S3 ストレージにアクセスします。ただし、ストリーム書き込みメソッドがまだ実装されていないため、データを送信する前に、最初にデータを (一時) ファイルに書き込む必要があります。

その制限を回避するには、コンテキストマネージャーを使用します。

import tempfile
from contextlib import contextmanager

@contextmanager
def s3upload(key):
    with tempfile.SpooledTemporaryFile(max_size=1024*10) as buffer:  # Size in bytes
        yield buffer  # After this, the file is typically written to
        buffer.seek(0)  # So that reading the file starts from its beginning
        key.set_contents_from_file(buffer)

コンテキスト管理ファイル オブジェクトとして使用します。

k = Key(b)
k.key = filename
k.set_metadata("Content-Type", mime)

with s3upload(k) as out:
    out.write(chunklet)
于 2012-09-25T14:48:25.877 に答える