加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 将文件和对象写入amazon s3

发布时间:2020-12-16 21:57:39 所属栏目:Python 来源:网络整理
导读:我正在使用amazon S3将动态生成的文件分发给S3. 在本地服务器上,我可以使用 destination = open(VIDEO_DIR + newvideo.name,'wb+') 将生成的视频存储到VIDEO_DIR.newvideo.name位置 是否有可行的方法将VIDEO_DIR更改为S3端点位置.那么动态生成的视频可以直接

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

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

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.

最佳答案
使用boto 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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读