Boto3如何合并TransferConfig与Config配置?
解决Boto3中同时使用TransferConfig与Config的问题
这两个配置不属于同一层级,没法直接合并传给S3资源的config参数,得分开使用:
botocore.client.Config是客户端/资源的全局配置,负责重试策略、签名版本这类基础客户端行为TransferConfig是S3传输操作(上传、下载等)专属的配置,只在执行具体传输任务时生效
正确用法步骤
- 先创建带有
Config的S3资源/客户端 - 在调用上传、下载等传输方法时,单独传入
TransferConfig参数
修改后的代码示例
from boto3.s3.transfer import TransferConfig from botocore.client import Config import boto3 # 初始化两种配置 transfer_config = TransferConfig(max_concurrency=10, ...) # 填入你的传输配置参数 config = Config(retries={'max_attempts': 5}, region_name='us-east-1', ...) # 填入你的客户端配置参数 # 创建带全局Config的S3资源 s3 = boto3.Session().resource("s3", config=config) # 执行传输操作时传入TransferConfig bucket = s3.Bucket('your-bucket-name') # 上传文件示例 bucket.upload_file('local-file-path', 's3-object-key', Config=transfer_config) # 下载文件示例 bucket.download_file('s3-object-key', 'local-file-path', Config=transfer_config)
如果使用S3客户端而非资源,用法类似:
s3_client = boto3.Session().client("s3", config=config) s3_client.upload_file('local-file-path', 'your-bucket-name', 's3-object-key', Config=transfer_config)
注意事项
TransferConfig仅对upload_file、download_file、upload_fileobj、download_fileobj这类依赖TransferManager的方法生效,不属于全局配置,每次调用这些方法时都可以按需传入不同的TransferConfig。
内容的提问来源于stack exchange,提问作者prosto.vint
相关产品推荐
相关产品推荐

