阿里云 OSS 提供了 S3 的兼容,所以如果你在 Django 应用当中,希望使用 OSS 作为文件存储的话,可以参考下方的说明,来使用。
安装
首先,你需要执行如下命令安装 django-storages 的 S3 兼容
# uv
uv add django-storages[s3]
# pip
pip install django-storages[s3]
Code language: CSS (css)
配置
接下来,就是在你的项目文件夹中的 settings.py 中添加如下配置
AWS_S3_ACCESS_KEY_ID = env("AWS_S3_ACCESS_KEY_ID")
AWS_S3_SECRET_ACCESS_KEY = env("AWS_S3_SECRET_ACCESS_KEY")
AWS_STORAGE_BUCKET_NAME = env("AWS_STORAGE_BUCKET_NAME")
AWS_LOCATION = env("AWS_LOCATION")
AWS_S3_REGION_NAME = env("AWS_S3_REGION_NAME")
AWS_S3_CUSTOM_DOMAIN = env("AWS_S3_CUSTOM_DOMAIN")
AWS_S3_ENDPOINT_URL = env("AWS_S3_ENDPOINT_URL")
AWS_S3_ADDRESSING_STYLE = "virtual"
AWS_S3_SIGNATURE_VERSION = "s3"
STORAGES = {
"default": {
"BACKEND": "storages.backends.s3.S3Storage",
},
}
Code language: PHP (php)
参考上方的配置,添加配置项后,保存,并重启服务器,即可在代码中进行测试。
测试代码
你可以执行 python manage.py shell 并执行如下代码,如果无报错,且可以在 OSS 控制台看到文件,则说明你的配置成功了。
from django.core.files.storage import default_storage
from django.core.files.base import ContentFile
content = ContentFile(b"Hello World!")
path = default_storage.save('test_file2.txt', content)
print(f"文件保存路径: {path}")
if default_storage.exists(path):
with default_storage.open(path, 'r') as f:
content = f.read()
print(f"文件内容: {content}")
url = default_storage.url(path)
print(f"文件URL: {url}")
default_storage.delete(path)
print(f"文件是否存在: {default_storage.exists(path)}")
Code language: PHP (php)