0

我正在尝试使用 django 存储为 Django 管理员获取静态文件。我正面临一种我无法清楚理解的奇怪行为。我有两个不同的存储桶,一个用于静态文件,另一个用于其他目的。如果我注释掉 AWS_S3_CUSTOM_DOMAIN 保持其他一切原样(它在下面发布的方式),一切正常。但是,如果我取消注释 AWS_S3_CUSTOM_DOMAIN 并覆盖我的存储后端 StaticStorage 中的自定义域,它就会开始给我 403。我知道我遗漏了一些东西,只是无法弄清楚是什么。

设置.py

S3_BUCKET = os.environ.get('S3_BUCKET')
S3_FILE_LOCATION = os.environ.get('S3_FILE_LOCATION')

AWS_ACCESS_KEY_ID = os.environ.get('S3_STORAGE_ACCESS_KEY_ID', '')
AWS_SECRET_ACCESS_KEY = os.environ.get('S3_STORAGE_SECRET_ACCESS_KEY', '')
AWS_STORAGE_BUCKET_NAME = os.environ.get('S3_BUCKET', '')
AWS_S3_CUSTOM_DOMAIN = f"{os.environ.get('S3_BUCKET', '')}.s3.amazonaws.com"
AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400',
}
AWS_DEFAULT_ACL = None
AWS_S3_VERIFY = False
AWS_S3_USE_SSL = False

# s3 static settings
STATIC_FILE_BUCKET = os.environ.get('STATIC_FILE_BUCKET')
STATIC_LOCATION = 'static'
STATIC_S3_CUSTOM_DOMAIN = f"{os.environ.get('STATIC_FILE_BUCKET', '')}.s3.amazonaws.com"
STATIC_URL = f'https://{STATIC_S3_CUSTOM_DOMAIN}/{STATIC_LOCATION}/'
STATICFILES_STORAGE = 'apps.utils.storage_backends.StaticStorage'
DEFAULT_FILE_STORAGE = 'apps.utils.storage_backends.PrivateMediaStorage'

storage_backends.py

class StaticStorage(S3Boto3Storage):
    location = 'static'
    default_acl = 'private'

    def __init__(self, *args, **kwargs):
        kwargs['bucket'] = settings.STATIC_FILE_BUCKET
        # self.custom_domain = settings.STATIC_S3_CUSTOM_DOMAIN
        super().__init__(*args, **kwargs)
4

1 回答 1

0

我发现了这个问题,我只需要在 storage_backends 中将 custom_domain 设置为 False。然后它只是使用我在 settings.py 中为静态文件设置的静态 url。

于 2020-05-01T21:14:41.160 回答