将存储在内存中的文件上传到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的主要内容,如果未能解决你的问题,请参考以下文章

python gzip文件在内存中并上传到s3

AWS S3 文件上传但存储桶中的文件没有大小?

将静态文件上传到 aws s3 存储桶后,css 中的 URL 不起作用

使用 NodeJS 中的特定路径将文件上传到 AWS S3

将文件上传到 s3,然后将 URL 存储在 Firebase - Swift 2.2

使用nodejs中的AWS Lambda函数上传音频文件