将存储在内存中的文件上传到s3
Posted
技术标签:
【中文标题】将存储在内存中的文件上传到s3【英文标题】:upload file stored in memory to s3 【发布时间】:2012-09-18 07:34:21 【问题描述】:我想继续问昨天发布的问题。我想将一些视频剪辑上传到 amazon s3。这些视频是作为中间结果生成的。所以我更喜欢将这些小视频片段存储在内存中(大约 400~500 KB),然后将每个片段上传到 s3。上传后,临时文件可以在内存中删除。因此,我想使用 tempfile。但是下面的代码有错误。请看一下,如何正确执行?
@contextmanager
def s3upload(key):
with tempfile.SpooledTemporaryFile(max_size=1021*1000) as buffer:
yield buffer
buffer.seek(0)
# key.send_file(buffer)
k.set_contents_from_file(buffer)
k.set_acl('public-read')
conn = boto.connect_s3()
b = conn.get_bucket('cc_test_s3')
k = Key(b)
k.key = '1.flv'
mime = mimetypes.guess_type('1.flv')[0]
with s3upload(k) as out:
out.write('1.flv')
输出:
The size of file uploaded is 5 KB, which is much less than the actual size of 1.flv (~400 KB).
【问题讨论】:
【参考方案1】:我建议您使用 s3fuse ,它基本上会将您的 s3 存储桶安装在您的本地驱动器上,然后您可以像保存在本地目录中一样直接保存文件。供参考,您可以查看s3fuse - google-code
【讨论】:
我在 /tmp 目录下创建了一个临时文件。然后将中间结果写入此临时文件。文件上传后,该临时文件被删除。 好的,所以在 s3fuse 中,您的文档将仅占用/存储在 s3 上。你会感觉到它就像本地目录(/tmp)。您不需要删除临时文件。以上是关于将存储在内存中的文件上传到s3的主要内容,如果未能解决你的问题,请参考以下文章
将静态文件上传到 aws s3 存储桶后,css 中的 URL 不起作用