如何将Backblaze B2存储桶连接到Django项目以存储媒体和静态文件?
从AWS S3迁移到Backblaze B2的Django配置修改方案
Backblaze B2兼容S3 API,可直接基于现有django-storages的S3配置修改,以下是具体步骤和修正后的配置:
1. 确认依赖
确保已安装必要依赖包:
pip install django-storages boto3
2. 替换settings.py中的AWS配置
将原AWS相关配置替换为Backblaze B2专属配置,注意替换占位符为你的B2实际信息:
# Backblaze B2 认证信息 AWS_ACCESS_KEY_ID = config('B2_KEY_ID') # 替换为你的B2 Key ID AWS_SECRET_ACCESS_KEY = config('B2_APPLICATION_KEY') # 替换为你的B2应用密钥 AWS_STORAGE_BUCKET_NAME = config('B2_BUCKET_NAME') # 替换为你的B2桶名 # B2 端点配置(根据桶所在区域选择,示例为us-west-002,可在B2控制台查看) AWS_S3_ENDPOINT_URL = 'https://s3.us-west-002.backblazeb2.com' AWS_S3_CUSTOM_DOMAIN = f'{AWS_STORAGE_BUCKET_NAME}.s3.us-west-002.backblazeb2.com' # 保留原有缓存和权限配置(按需调整) AWS_DEFAULT_ACL = None AWS_S3_OBJECT_PARAMETERS = {'CacheControl': 'max-age=86400'} AWS_QUERYSTRING_AUTH = False # 静态文件和媒体文件配置 STATIC_LOCATION = 'static' STATIC_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/{STATIC_LOCATION}/' STATICFILES_STORAGE = 'myproject.storages.StaticStorage' MEDIA_LOCATION = 'media' MEDIA_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/{MEDIA_LOCATION}/' DEFAULT_FILE_STORAGE = 'myproject.storages.MediaStorage'
3. 自定义Storage类无需修改
如果你的myproject.storages.MediaStorage和StaticStorage继承自storages.backends.s3boto3.S3Boto3Storage,无需修改代码,配置生效后即可直接使用。
常见错误排查
- 端点URL错误:确认B2桶所在区域的端点,可在Backblaze控制台的桶详情页查看。
- 认证失败:检查Key ID和应用密钥是否正确,确保密钥拥有对应桶的读写权限。
- 访问权限问题:若需公开访问静态/媒体文件,需在B2控制台开启桶的"公共访问",并将
AWS_DEFAULT_ACL设为'public-read'。 - 自定义域名问题:若使用自有域名绑定B2桶,需替换
AWS_S3_CUSTOM_DOMAIN为你的自定义域名,并配置好CNAME解析。
内容的提问来源于stack exchange,提问作者Enoch
相关产品推荐
相关产品推荐

