我正在使用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.
使用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)
归档时间: |
|
查看次数: |
4295 次 |
最近记录: |