#python #django #amazon-web-services #amazon-s3
#python #django #amazon-веб-сервисы #amazon-s3
Вопрос:
У меня возникли проблемы с доступом к мультимедийным файлам, загруженным на AWS S3 для моего приложения Django. Я пытался использовать библиотеки Boto3 и Django-Storages и следовал этим руководствам:
https://simpleisbetterthancomplex.com/tutorial/2017/08/01/how-to-setup-amazon-s3-in-a-django-project.html
https://www.youtube.com/watch?v=kt3ZtW9MXhw
Веб-сайт администратора Django и мой веб-интерфейс не могут загружать какой-либо статический и мультимедийный контент. Администратор Django отображается без какого-либо CSS, и, аналогично, в моем интерфейсе нет изображений.
Конфигурации AWS были добавлены в settings.py файл:
AWS_ACCESS_KEY_ID = config('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = config('AWS_SECRET_ACCESS_KEY')
AWS_S3_REGION_NAME = "me-south-1"
AWS_STORAGE_BUCKET_NAME = 'jooler-mea'
AWS_S3_CUSTOM_DOMAIN = '%s.s3.me-south-1.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
AWS_S3_OBJECT_PARAMETERS = {
'CacheControl': 'max-age=86400',
}
AWS_STATIC_LOCATION = 'static'
STATICFILES_STORAGE = 'joole.storage_backends.StaticStorage'
STATIC_URL = "https://%s/%s/" % (AWS_S3_CUSTOM_DOMAIN, AWS_STATIC_LOCATION)
DEFAULT_FILE_STORAGE_LOCATION = 'media'
AWS_S3_FILE_OVERWRITE = False
AWS_DEFAULT_ACL = None
DEFAULT_FILE_STORAGE = 'joole.storage_backends.MediaStorage'
Соответствующие хранилища в storage_backends.py файл:
from django.conf import settings
from storages.backends.s3boto3 import S3Boto3Storage
class StaticStorage(S3Boto3Storage):
location = settings.AWS_STATIC_LOCATION
class MediaStorage(S3Boto3Storage):
location = settings.DEFAULT_FILE_STORAGE_LOCATION
file_overwrite = False
Файлы успешно загружаются на веб-сайт AWS, я могу загрузить файлы оттуда на свой компьютер. Я пытался поиграть с CORS и пользовательскими политиками, но безуспешно. Я зашел в тупик или не уверен, куда идти дальше. Будем признательны за любую помощь! Спасибо!
Ответ №1:
Возможно, вам потребуется создать общедоступный доступ к вашей корзине AWS S3.
Обратитесь к https://docs.aws.amazon.com/AmazonS3/latest/user-guide/block-public-access-bucket.html
Это отличается от разрешений, которые вы предоставили в соответствии с вашим вопросом (для вашего собственного пользователя).
Или попробуйте установить следующую политику корзины. Смотрите скриншот. Политика корзины:
{
"Version": "2020-09-03",
"Statement": [
{
"Sid": "AddPerm",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::jooler-mea/*"
}
]
}
Комментарии:
1. Можете ли вы отправить распечатку из AWS списка файлов в вашей корзине?
2. Я добавил фотографию в исходный вопрос, я не могу вставить изображение в комментарии. Спасибо
3. Я обновил свой ответ… Попробуйте установить политику корзины вручную.
4. Как только вы это сделаете, вы, вероятно, увидите ярлык «Общедоступный», как на скриншоте.
5. Да! Готово! Сейчас загружена половина мультимедиа. Это означает, что любой может получить доступ к мультимедиа?