====== django-stroages ====== ===== 安装 ===== uv add 'django-storages[s3]' ===== 配置 ===== env = environ.Env( ... AWS_S3_ACCESS_KEY_ID=(str, ""), AWS_S3_SECRET_ACCESS_KEY=(str, ""), AWS_STORAGE_BUCKET_NAME=(str, ""), AWS_LOCATION=(str, ""), AWS_S3_REGION_NAME=(str, ""), AWS_S3_CUSTOM_DOMAIN=(str, ""), AWS_S3_ENDPOINT_URL=(str, ""), ) 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", } } ===== 测试代码 ===== 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生成 url = default_storage.url(path) print(f"文件URL: {url}") # 测试文件删除 default_storage.delete(path) print(f"文件是否存在: {default_storage.exists(path)}")