【问题标题】:How to use aws boto3 put_object to stream download/upload如何使用 aws boto3 put_object 流式下载/上传
【发布时间】:2023-11-05 05:38:01
【问题描述】:
我使用put_object从s3桶复制到另一个跨区域,跨分区。问题是文件大小变得更加不可预测,并且由于get_object 存储到内存中,我最终给它的资源超出了大部分时间的需要。
理想情况下,我想“流式传输”下载/上传过程
例如,鉴于我的对象哈希为123abc456def789
场景:分块下载/上传对象
- 下载部分对象
123保存到内存
- 上传部分对象
123从内存中移除
- ... 以此类推直到
789
这样写入缓冲区的是constant空间
建议使用copy_object,但我在普通到 GovCloud 之间转移,所以这是不可能的。理想情况下,我想摆脱下载到磁盘。
【问题讨论】:
标签:
python
amazon-web-services
amazon-s3
boto3
【解决方案1】:
我最近遇到了同样的问题,smallo对这个问题的回答帮助我找到了解决方案!所以所有功劳归于他!
但基本上,您可以使用方法read 并将amt 参数传递给它,指定要从流中读取的字节数。您可以多次调用它,直到所有流完成。
它看起来像这样:
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