django - 当所有公共(public)访问都被阻止时,为什么我无法从我的 S3 存储桶中获取图像? 403 Forbidden 但静态文件加载正常

标签 django heroku amazon-s3

我的 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 禁止错误。

最佳答案

在你的settings.py中你有设置吗?

AWS_DEFAULT_ACL = 'public-read'

看这个例子是我所在的巴西州的一个公共(public)项目。

Project

关于django - 当所有公共(public)访问都被阻止时,为什么我无法从我的 S3 存储桶中获取图像? 403 Forbidden 但静态文件加载正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58183446/

相关文章:

ruby-on-rails - Heroku + Mechanize 将 OBJ 变成字符串

file-upload - Jquery 文件上传 - 如何限制上传的文件数量

php - 如何自动化雅虎小型企业中托管的数据库备份

python - 如何扩展 forms.datetime 字段中现有的输入格式?

Firefox 上的 JavaScript MIME 类型警告

python - 模拟修补类方法不起作用

Django Rest Framework 和字段级权限

heroku - 如何关闭部署在 Heroku 上的应用程序?

heroku - 当我的应用程序遇到内部错误时如何触发电子邮件警报?

android - AWS Android SDK 元数据支持问题