[英]How to upload url to s3 bucket using StringIO and put_object method with boto3
[英]How to use aws boto3 put_object to stream download/upload
我使用put_object
从 s3 存储桶复制到另一个跨区域、跨分区。 问题是文件大小变得更加不可预测,并且由于get_object
存储到 memory,我最终给它提供了比大多数时间需要的更多资源。
理想情况下,我想“流式传输”下载/上传过程
例如,假设我有一个 object hash 的123abc456def789
场景:分块下载/上传 object
123
保存到memory123
从 memory 中移除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.