Cloudflare R2 是 Cloudflare 推出的对象存储服务,专门设计用来替代 Amazon S3 等传统云存储服务。以下是 R2 的主要特点:
- 零出站费用 - R2 最大的卖点是不收取数据传输出站费用,这与 AWS S3 等服务形成鲜明对比。传统云存储服务通常在数据流出时收取高额费用,而 R2 完全免除了这部分成本。
- S3 兼容性 - R2 完全兼容Amazon S3 的 API,这意味着现有使用 S3 的应用可以无缝迁移到 R2,无需修改代码。
安装依赖
安装 boto3
和 django-storages
boto3
是 Amazon Web Services(AWS)官方的 Python SDK,用于和 AWS 服务进行交互。django-storages
提供了多种云存储后端的支持。
django-storages
提供了 Django 兼容的存储接口,内部可以使用 boto3
作为后端来与 AWS S3 进行通信。Cloudflare R2 由于兼容 S3,所以可以无缝切换。
配置
# Cloudflare R2 配置
AWS_ACCESS_KEY_ID = env("R2_ACCESS_KEY_ID")
AWS_SECRET_ACCESS_KEY = env("R2_SECRET_ACCESS_KEY")
AWS_STORAGE_BUCKET_NAME = env("R2_BUCKET_NAME")
AWS_S3_ENDPOINT_URL = env("R2_ENDPOINT_URL")
AWS_S3_REGION_NAME = "auto"
# 文件存储配置
AWS_S3_FILE_OVERWRITE = False
AWS_DEFAULT_ACL = None
AWS_S3_VERIFY = True
AWS_S3_USE_SSL = True
STORAGES = {
"default": {
"BACKEND": "storages.backends.s3boto3.S3Boto3Storage",
"OPTIONS": {
"access_key": AWS_ACCESS_KEY_ID,
"secret_key": AWS_SECRET_ACCESS_KEY,
"bucket_name": AWS_STORAGE_BUCKET_NAME,
"endpoint_url": AWS_S3_ENDPOINT_URL,
"region_name": AWS_S3_REGION_NAME,
"file_overwrite": AWS_S3_FILE_OVERWRITE,
"default_acl": AWS_DEFAULT_ACL,
"location": "media",
},
},
"staticfiles": {
"BACKEND": "django.contrib.staticfiles.storage.StaticFilesStorage",
},
}