Почему я не могу получить изображения из своей корзины S3, когда весь публичный доступ заблокирован? 403 Запрещено, но статические файлы загружаются нормально - PullRequest
2 голосов
/ 01 октября 2019

Мой сайт Django позволяет пользователям загружать фотографии. Когда корзина s3 находится в открытом доступе, мультимедийный контент прекрасно загружается на сайт. Однако, как только я блокирую все общедоступный доступ, контент больше не загружается, и отображается ошибка 403. В своем коде я добавил значения, необходимые для проверки подлинности запросов. Там нет политики корзины или каких-либо конфигураций CORS. Я пробовал несколько разных предложений из блогов и учебных пособий, но, похоже, ничего не работает.

У меня есть пользователь, у которого есть программный доступ, и он установил секретные переменные в среде heroku и все еще получает ошибку 403. Я очень старался установить секретные переменные, но все еще безуспешно.

settings.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())

storage_backends.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

Все статические файлы загружаются нормально, но носителифайлы не загружаются вообще. Я ожидаю загрузки файлов при отображении их на веб-странице просмотра. однако я просто получаю 403 запрещенную ошибку.

Ответы [ 2 ]

0 голосов
/ 04 октября 2019

Таким образом, после многих итераций все сводится к отсутствующей строке кода в файле storage_backends.py, где отсутствует строка custom_domain = False

Я обновил исходную запись, чтобы она соответствовала правильному storage_backends.py файлу

0 голосов
/ 01 октября 2019

В ваших settings.py у вас есть набор?

AWS_DEFAULT_ACL = 'public-read'

Посмотрите, этот пример - публичный проект для моего штата в Бразилии.

Проект

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...