在本地服务器上,我可以使用
destination = open(VIDEO_DIR + newvideo.name,'wb+')
将生成的视频存储到VIDEO_DIR.newvideo.name位置
是否有可行的方法将VIDEO_DIR更改为S3端点位置.那么动态生成的视频可以直接写入S3服务器吗?
另一个问题是:有没有可行的方法直接将对象写入S3?例如,一个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')
但我想提高效率.使用Python.
最佳答案
使用
原文链接:https://www.f2er.com/python/439379.htmlboto
library访问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)