批量下载R2(Cloudflare R2)的文件可以通过编写脚本来实现。以下是使用AWS SDK for Python(Boto3)实现批量下载R2文件的示例。需要先安装Boto3库并进行配置。
准备工作
-
安装Boto3库:
pip install boto3
-
配置Boto3: 创建或编辑
~/.aws/credentials
文件,添加你的Cloudflare R2的Access Key和Secret Key:[default] aws_access_key_id = YOUR_ACCESS_KEY aws_secret_access_key = YOUR_SECRET_KEY
-
创建或编辑
~/.aws/config
文件,添加你的R2的配置:[default] region = auto endpoint_url = https://YOUR_ACCOUNT_ID.r2.cloudflarestorage.com
批量下载R2文件的Python脚本
import boto3
import os
# 设置S3客户端
s3_client = boto3.client('s3')
# R2存储桶名称
bucket_name = 'your-bucket-name'
# 本地存储路径
local_dir = '/path/to/local/directory'
def download_files(bucket_name, local_dir):
# 列出存储桶中的所有对象
response = s3_client.list_objects_v2(Bucket=bucket_name)
if 'Contents' in response:
for obj in response['Contents']:
file_key = obj['Key']
local_file_path = os.path.join(local_dir, file_key)
# 创建本地目录
os.makedirs(os.path.dirname(local_file_path), exist_ok=True)
# 下载文件
s3_client.download_file(bucket_name, file_key, local_file_path)
print(f'Downloaded {file_key} to {local_file_path}')
else:
print('No files found in the bucket.')
# 调用下载函数
download_files(bucket_name, local_dir)
脚本说明
-
设置S3客户端: 使用Boto3创建S3客户端,并配置访问R2所需的凭证。
-
列出存储桶中的所有对象: 使用
list_objects_v2
方法列出存储桶中的所有文件。 -
下载文件: 遍历列出的对象,并使用
download_file
方法将文件下载到本地指定目录。
运行脚本
将上述脚本保存为 download_r2_files.py
,并根据你的具体情况修改 bucket_name
和 local_dir
。然后运行脚本:
python download_r2_files.py
这个脚本会自动将R2存储桶中的所有文件下载到本地指定目录。注意,Cloudflare R2与AWS S3 API兼容,因此可以使用Boto3库来操作R2存储。
有可能会报以下错误,下面是解决方案
in _make_api_call raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (InvalidAccessKeyId) when calling the ListObjectsV2 operation: The AWS Access Key Id you provided does not exist in our records.
这个错误信息表明您提供的 AWS Access Key ID 不存在或无效。以下是一些可能的解决方法和检查步骤:
检查和更新凭证
-
确保凭证正确:
- 检查
~/.aws/credentials
文件,确保[default]
配置下的aws_access_key_id
和aws_secret_access_key
是正确的 Cloudflare R2 的凭证。
[default] aws_access_key_id = YOUR_ACCESS_KEY aws_secret_access_key = YOUR_SECRET_KEY
- 检查
-
确保配置文件正确:
- 检查
~/.aws/config
文件,确保[default]
配置下的region
和endpoint_url
是正确的。
[default] region = auto endpoint_url = https://YOUR_ACCOUNT_ID.r2.cloudflarestorage.com
- 检查
使用脚本内显式设置凭证和配置
可以在脚本中显式设置凭证和配置,以确保使用的是正确的 Cloudflare R2 凭证。
import boto3
import os
# 显式设置R2的访问凭证和配置
s3_client = boto3.client(
's3',
aws_access_key_id='YOUR_ACCESS_KEY',
aws_secret_access_key='YOUR_SECRET_KEY',
endpoint_url='https://YOUR_ACCOUNT_ID.r2.cloudflarestorage.com',
region_name='auto'
)
# R2存储桶名称
bucket_name = 'your-bucket-name'
# 本地存储路径
local_dir = '/path/to/local/directory'
def download_files(bucket_name, local_dir):
# 列出存储桶中的所有对象
response = s3_client.list_objects_v2(Bucket=bucket_name)
if 'Contents' in response:
for obj in response['Contents']:
file_key = obj['Key']
local_file_path = os.path.join(local_dir, file_key)
# 创建本地目录
os.makedirs(os.path.dirname(local_file_path), exist_ok=True)
# 下载文件
s3_client.download_file(bucket_name, file_key, local_file_path)
print(f'Downloaded {file_key} to {local_file_path}')
else:
print('No files found in the bucket.')
# 调用下载函数
download_files(bucket_name, local_dir)
检查网络连接
确保您的网络连接正常,能够访问 Cloudflare R2 的 API 端点。如果网络连接有问题,可能会导致无法验证凭证。
检查凭证的权限
确保您提供的 AWS Access Key ID 和 Secret Access Key 具有访问 Cloudflare R2 存储桶的权限。通常,您需要在 Cloudflare R2 中配置正确的访问策略,以允许列出和下载存储桶中的对象。
通过以上步骤和检查,您应该能够解决这个 InvalidAccessKeyId
的问题。如果问题仍然存在,请确保您的凭证和配置文件没有拼写错误,并且 Cloudflare R2 的 API 端点正确无误。