【问题标题】: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

场景:分块下载/上传对象

  1. 下载部分对象123保存到内存
  2. 上传部分对象123从内存中移除
  3. ... 以此类推直到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
    

    【讨论】:

      最近更新 更多