【发布时间】:2021-02-08 20:45:02
【问题描述】:
在this tutorial 之后,我使用 boto3 和 Django-storages 将我们的系统设置为使用 Amazons S3 文件存储。我运行了collectstatic 命令,它运行良好,文件显示在 AWS 管理控制台中。但是在本地运行服务器 (runserver) 时,所有静态文件都丢失了。查看控制台有错误消息
GET https://BUCKET.s3.eu-central-1.amazonaws.com/static/admin/css/nav_sidebar.css net::ERR_ABORTED 403 (Forbidden)
对于每个文件。该网址对我来说看起来不错,上传工作正常,但显然访问不起作用。这与我在 AWS 中的配置有关吗?还是这是 Django 设置问题?
设置文件如下所示:
STATICFILES_DIRS = []
AWS_ACCESS_KEY_ID = 'XYZ'
AWS_SECRET_ACCESS_KEY = 'XYZ'
AWS_STORAGE_BUCKET_NAME = 'BUCKET'
AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
AWS_S3_OBJECT_PARAMETERS = {
'CacheControl': 'max-age=86400',
}
AWS_STATIC_LOCATION = 'static'
STATICFILES_STORAGE = 'hq.storage_backends.StaticStorage'
STATIC_URL = "https://%s/%s/" % (AWS_S3_CUSTOM_DOMAIN, AWS_STATIC_LOCATION)
AWS_MEDIA_LOCATION = 'media'
DEFAULT_FILE_STORAGE = 'hq.storage_backends.MediaStorage'
【问题讨论】:
-
确保存储桶策略是公开的(并且文件可以公开访问),如果是,您可能会尝试运行
runserver --insecure,但显然如果文件不可公开访问,请不要在生产中使用它您可以尝试设置AWS_DEFAULT_ACL='public-read'并再次运行 collect static 以使其公开 -
阻止所有公共访问已开启,我暂时将其关闭。如果访问被阻止,我如何上传内容?
-
您使用存储桶的凭据,这样您就可以将图像发布到存储桶,但由于默认策略不可公开访问,因此在没有凭据的情况下请求时不会返回,但是因为它是静态数据,将其公开可能是个好主意,或者您可能希望设置 aws 以仅允许该存储桶使用您的特定域
标签: django amazon-web-services amazon-s3 boto3 python-django-storages