如何同步文件到Cloudflare R2中

794 阅读2分钟

要将本地项目文件直接部署到 Cloudflare R2,您可以使用 AWS SDK for Python(Boto3)来编写脚本,或者使用像 aws-cli 这样的工具来批量上传文件和文件夹。

以下是使用 Boto3 和 aws-cli 的方法:

使用 Boto3 的方法

  1. 安装 Boto3 库

    pip install boto3
    
  2. 配置 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
    
  3. 编写脚本上传文件夹和文件

import boto3
import os

# 设置S3客户端
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/project'

def upload_files(local_dir, bucket_name):
    for root, dirs, files in os.walk(local_dir):
        for file in files:
            local_file_path = os.path.join(root, file)
            relative_path = os.path.relpath(local_file_path, local_dir)
            s3_file_key = relative_path.replace("\\", "/")  # 替换路径分隔符以适应S3

            # 上传文件
            s3_client.upload_file(local_file_path, bucket_name, s3_file_key)
            print(f'Uploaded {local_file_path} to s3://{bucket_name}/{s3_file_key}')

# 调用上传函数
upload_files(local_dir, bucket_name)

使用 aws-cli 的方法

  1. 安装 AWS CLI

    pip install awscli
    
  2. 配置 AWS CLI: 使用 aws configure 配置您的 Cloudflare R2 凭证和配置:

    aws configure
    

    需要输入您的 Access Key、Secret Key、默认区域(可以是auto),以及默认输出格式(可以是 json)。

  3. 上传文件夹和文件: 使用 aws s3 cp 命令递归上传整个目录到 R2:

    aws s3 cp /path/to/local/project s3://your-bucket-name --recursive --endpoint-url=https://YOUR_ACCOUNT_ID.r2.cloudflarestorage.com
    

注意事项

  • 路径配置:确保路径配置正确,包括本地路径和 R2 存储桶路径。
  • 权限:确保您的 Cloudflare R2 的 Access Key 和 Secret Key 具有上传文件到指定存储桶的权限。
  • 依赖项:如果使用 Boto3,请确保已安装所需的依赖项,并在脚本中正确引用它们。

通过上述方法,您可以轻松地将本地项目文件批量上传到 Cloudflare R2 存储。