相当于boto3中的get_contents_to_file

Ala*_*air 13 python amazon-s3 boto3

在boto3中,有没有相当于get_contents_to_file,将对象的内容复制到文件句柄?

在boto中,如果我有一个S3对象key,我可以将内容复制到一个临时文件中:

from tempfile import TemporaryFile
key = code_that_gets_key()

with TemporaryFile() as tmp_file:
    key.get_contents_to_file(key, tmpfile)
Run Code Online (Sandbox Code Playgroud)

我还没有找到boto3中的等价物.

我已经能够替换使用get_contents_to_filenamedownload_file.但是,这涵盖了我提供文件名的情况.在这种情况下,我想提供文件句柄作为参数.

目前,我可以通过遍历正文来获取代码在boto3中工作,如下所示:

with TemporaryFile() as tmp_file:
    body = key.get()['Body']
    for chunk in iter(lambda: body.read(4096), b''):
        filehandle.write(chunk)
Run Code Online (Sandbox Code Playgroud)

在boto3中有更好的方法吗?

Pet*_*ain 12

V1.4.0开始,有一个download_fileobj功能可以完全满足您的需求.根据正式文件:

import boto3
s3 = boto3.resource('s3')
bucket = s3.Bucket('mybucket')
obj = bucket.Object('mykey')

with open('filename', 'wb') as data:
    obj.download_fileobj(data)
Run Code Online (Sandbox Code Playgroud)

该操作也可以在bucket资源s3客户端上使用,例如:

import boto3
s3 = boto3.resource('s3')
bucket = s3.Bucket('mybucket')

with open('filename', 'wb') as data:
    bucket.download_fileobj('mykey', data)
Run Code Online (Sandbox Code Playgroud)