将文件和对象写入amazon s3

sus*_*nne 5 python amazon-s3

我正在使用amazon S3将动态生成的文件分发给S3.

在本地服务器上,我可以使用

destination = open(VIDEO_DIR + newvideo.name, 'wb+')
Run Code Online (Sandbox Code Playgroud)

将生成的视频存储到VIDEO_DIR.newvideo.name位置

是否有可行的方法将VIDEO_DIR更改为S3端点位置.那么动态生成的视频可以直接写入S3服务器吗?

另一个问题是:有没有可行的方法直接将对象写入S3?例如,a chunklet=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')
Run Code Online (Sandbox Code Playgroud)

但我想提高效率.使用Python.

Mar*_*ers 5

使用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)
Run Code Online (Sandbox Code Playgroud)

将其用作上下文管理的文件对象:

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

with s3upload(k) as out:
    out.write(chunklet)
Run Code Online (Sandbox Code Playgroud)