繁体   English   中英

如何使用 aws boto3 put_object 到 stream 下载/上传

[英]How to use aws boto3 put_object to stream download/upload

我使用put_object从 s3 存储桶复制到另一个跨区域、跨分区。 问题是文件大小变得更加不可预测,并且由于get_object存储到 memory,我最终给它提供了比大多数时间需要的更多资源。

理想情况下,我想“流式传输”下载/上传过程

例如,假设我有一个 object hash 的123abc456def789

场景:分块下载/上传 object

  1. 下载部分object 123保存到memory
  2. 上传部分 object 123从 memory 中移除
  3. ... 以此类推,直到789

这样写入缓冲区的内容是constant空间

建议使用copy_object但我在普通到 GovCloud 之间转移,所以这是不可能的。 理想情况下,我想摆脱下载到磁盘。

我最近遇到了同样的问题, smallo对这个问题的回答帮助我找到了解决方案! 所以所有的功劳归于他!

但基本上,您可以使用方法read并将amt参数传递给它,指定要从 stream 读取的字节数。 您可以多次调用它,直到所有 stream 完成。 它看起来像这样:

import boto3
import io

s3 = boto3.session.Session(profile_name=profile).resource('s3')
s3_obj = s3.Object(bucket_name=bucket, key=key)

body = s3_obj.get()['Body']
with io.FileIO('sample.txt', 'w') as file:
    while file.write(body.read(amt=512)):
        pass

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM