You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django迁移后django-storages将桶名作为文件夹存入问题排查

问题分析与解决方案

这是配置冲突导致的,并非django-storages的Bug。问题出在你的endpoint_url与bucket_name配置的逻辑冲突上,新版本django-storages的路径解析逻辑和旧版本(搭配Django3.2时)有差异,引发了这个问题。

核心原因

DigitalOcean Spaces的端点有两种标准格式:

  1. 子域名模式:https://<bucket-name>.<region>.digitaloceanspaces.com/(桶名作为子域名直接包含在端点中)
  2. 路径模式:https://<region>.digitaloceanspaces.com/(桶名通过后续路径指定)

你的配置中,endpoint_url已经包含了桶名(mySubdomain应该就是你的myBucket),同时又显式设置了bucket_name: 'myBucket'。新版本的django-storages会把这个显式设置的bucket_name当成对象的路径前缀,最终导致文件被存入/myBucket/static/路径下,而非预期的桶内static/目录。

修正后的配置

根据你使用的端点模式二选一:

模式一:子域名模式(推荐)

移除bucket_name配置,因为端点已经包含桶名:

STORAGES = {
    "default": {
        "BACKEND": "django.core.files.storage.FileSystemStorage",
    },
    "staticfiles": {
        "BACKEND": "storages.backends.s3boto3.S3Boto3Storage",
        "OPTIONS": {
            "secret_key": "mySecretKey",
            "access_key": "myAccessKey",
            "endpoint_url": 'https://myBucket.sfo2.digitaloceanspaces.com/',
            "object_parameters": {'CacheControl': 'max-age=86400'},
            "location": 'static',
            "default_acl": 'public-read',
        },
    }, 
}
STATIC_URL = "https://myBucket.sfo2.digitaloceanspaces.com/static/"

模式二:路径模式

保留bucket_name,但修改端点为不带桶名的区域地址,同时调整STATIC_URL:

STORAGES = {
    "default": {
        "BACKEND": "django.core.files.storage.FileSystemStorage",
    },
    "staticfiles": {
        "BACKEND": "storages.backends.s3boto3.S3Boto3Storage",
        "OPTIONS": {
            "secret_key": "mySecretKey",
            "access_key": "myAccessKey",
            "bucket_name": 'myBucket',
            "endpoint_url": 'https://sfo2.digitaloceanspaces.com/',
            "object_parameters": {'CacheControl': 'max-age=86400'},
            "location": 'static',
            "default_acl": 'public-read',
        },
    }, 
}
STATIC_URL = "https://sfo2.digitaloceanspaces.com/myBucket/static/"

验证

修改配置后,执行python manage.py collectstatic --clear(--clear用于清空旧的错误路径文件),即可看到文件被正确存入桶的static/目录下。

内容的提问来源于stack exchange,提问作者user1389840

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 03:58:12