S3Transfer download_file 出错,但 client.download_file 工作正常
S3Transfer download_file errors out, but client.download_file works fine
我在 Python 中使用 Boto 从我的 S3 存储桶下载文件。
这很好用:
import boto3
s3_client = boto3.resource('s3')
s3_client.meta.client.download_file('mybucket', 'db/file.00.txt', '/work/testing/file.00.txt')
我想使用 S3Transfer 自动使用多部分,因为我将处理一些非常大的文件 (900 MB+)。
但是,当我尝试以下操作时,它失败了:
import boto3
from boto3.s3.transfer import S3Transfer
s3_client = boto3.resource('s3')
transfer = S3Transfer(s3_client)
transfer.download_file('mybucket', 'db/file.00.txt', '/work/testing/file.00.txt')
我得到的错误如下:
Traceback (most recent call last):
File "/work/sparkrun/CommonBlast.py", line 126, in <module>
transfer.download_file('mybucket', 'db/file.00.txt', '/work/testing/file.00.txt')
File "/usr/local/lib/python2.7/dist-packages/boto3/s3/transfer.py", line 658, in download_file
object_size = self._object_size(bucket, key, extra_args)
File "/usr/local/lib/python2.7/dist-packages/boto3/s3/transfer.py", line 723, in _object_size
return self._client.head_object(
AttributeError: 's3.ServiceResource' object has no attribute 'head_object'
download_file 方法的参数是相同的。我正在使用最新版本的 boto (1.2.3)。怎么回事?
当 S3Transfer
需要客户端时,您正在传递资源。
您也永远不需要创建自己的 S3Transfer
对象,因为它的方法已经添加到客户端和资源中。
import boto3
client = boto3.client('s3')
client.download_file('bucket', 'key', 'filename.txt')
resource = boto3.resource('s3')
bucket = resource.Bucket('bucket')
bucket.download_file('key', 'filename.txt')
obj = bucket.Object('key')
obj.download_file('filename.txt')
我在 Python 中使用 Boto 从我的 S3 存储桶下载文件。
这很好用:
import boto3
s3_client = boto3.resource('s3')
s3_client.meta.client.download_file('mybucket', 'db/file.00.txt', '/work/testing/file.00.txt')
我想使用 S3Transfer 自动使用多部分,因为我将处理一些非常大的文件 (900 MB+)。
但是,当我尝试以下操作时,它失败了:
import boto3
from boto3.s3.transfer import S3Transfer
s3_client = boto3.resource('s3')
transfer = S3Transfer(s3_client)
transfer.download_file('mybucket', 'db/file.00.txt', '/work/testing/file.00.txt')
我得到的错误如下:
Traceback (most recent call last):
File "/work/sparkrun/CommonBlast.py", line 126, in <module>
transfer.download_file('mybucket', 'db/file.00.txt', '/work/testing/file.00.txt')
File "/usr/local/lib/python2.7/dist-packages/boto3/s3/transfer.py", line 658, in download_file
object_size = self._object_size(bucket, key, extra_args)
File "/usr/local/lib/python2.7/dist-packages/boto3/s3/transfer.py", line 723, in _object_size
return self._client.head_object(
AttributeError: 's3.ServiceResource' object has no attribute 'head_object'
download_file 方法的参数是相同的。我正在使用最新版本的 boto (1.2.3)。怎么回事?
当 S3Transfer
需要客户端时,您正在传递资源。
您也永远不需要创建自己的 S3Transfer
对象,因为它的方法已经添加到客户端和资源中。
import boto3
client = boto3.client('s3')
client.download_file('bucket', 'key', 'filename.txt')
resource = boto3.resource('s3')
bucket = resource.Bucket('bucket')
bucket.download_file('key', 'filename.txt')
obj = bucket.Object('key')
obj.download_file('filename.txt')