我的 Django 网站允许用户上传照片。当 s3 存储桶公开时,媒体内容可以在网站上正常加载。但是,一旦我阻止所有公共(public)访问,内容将不再加载,并显示 403 禁止错误。在我的代码中,我添加了允许验证请求所需的值。没有存储桶策略或任何 CORS 配置。我尝试了博客和教程中的几种不同建议,但似乎没有任何效果。
我有一个具有编程访问权限的用户,并在 heroku 环境中设置了 secret 变量,但仍然出现 403 错误。 我已经努力设置 secret 变量,但仍然没有成功。
设置.py
AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = os.environ.get('AWS_STORAGE_BUCKET_NAME')
AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
AWS_S3_OBJECT_PARAMETERS = {
'CacheControl': 'max-age=86400',
}
MEDIA_LOCATION = 'MediaStorage'
MEDIA_URL = "https://%s/%s/" % (AWS_S3_CUSTOM_DOMAIN, MEDIA_LOCATION)
MEDIA_FILE_STORAGE = 'MediaStorage'
STATIC_ROOT = os.path.join(BASE_DIR, "static")
STATIC_LOCATION = 'static'
STATICFILES_LOCATION = 'StaticStorage'
STATIC_URL = "https://%s/%s/" % (AWS_S3_CUSTOM_DOMAIN, STATIC_LOCATION)
django_heroku.settings(locals())
存储后端.py
from storages.backends.s3boto3 import S3Boto3Storage
from django.conf import settings
class StaticStorage(S3Boto3Storage):
location = settings.STATICFILES_LOCATION
class MediaStorage(S3Boto3Storage):
location = settings.MEDIA_FILE_STORAGE
file_overwrite = False
custom_domain = False
所有静态文件都可以正常加载,但媒体文件根本无法加载。 我希望在 View 网页中显示文件时加载这些文件。但是我只是收到 403 禁止错误。
最佳答案
关于django - 当所有公共(public)访问都被阻止时,为什么我无法从我的 S3 存储桶中获取图像? 403 Forbidden 但静态文件加载正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58183446/