#django #amazon-web-services #amazon-s3
#джанго #amazon-web-services #amazon-s3
Вопрос:
Недавно я решил объединить изображения, используемые в моем приложении, из статической папки в моем корневом каталоге в корзину AWS S3.
К сожалению, я получаю эту ошибку, когда открываю свое приложение в браузере: localhost/:65 GET https://django-plantin-bugtracker-files.s3.amazonaws.com/profile_pics/aragorn_SztKYs6.jpg?AWSAccessKeyId=AKIA3KFS7YZNOMSRYG3Oamp;Signature=fYWSQFdzTvtOF9OXAfw9yqfGyQc=amp;E
Это странно, потому что я могу получить прямой доступ к URL-адресу изображения (например https://django-plantin-bugtracker-files.s3.us-east-2.amazonaws.com/default.jpg ), что наводит меня на мысль, что мое приложение просто не получает к нему должного доступа.
Я разблокировал весь общедоступный доступ к моей корзине S3 и добавил эти строки кодов в следующие файлы:
В моем приложении settings.py
я добавил:
AWS_STORAGE_BUCKET_NAME=config('AWS_S3_BUCKET_NAME')
AWS_ACCESS_KEY_ID = config('AWS_S3_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = config('AWS_S3_SECRET_ACCESS_KEY')
AWS_S3_FILE_OVERWRITE = False
AWS_DEFAULT_ACL = None
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
В моем ведре S3 Bucket Policy
:
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "AllowPublicRead",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::django-plantin-bugtracker-files/*"
}
]
}
В моем ведре S3 CORS
:
[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"PUT",
"POST",
"DELETE"
],
"AllowedOrigins": [
"*"
],
"ExposeHeaders": []
}
]
Кто-нибудь знает, почему мои изображения не отображаются? Веб-страница загружается нормально, и ошибки от Django нет.
Изображения выглядят следующим образом:
Комментарии:
1. «разблокирован весь общедоступный доступ в моей корзине S3» — как насчет настроек общедоступного доступа на уровне учетной записи?
2. Вот что у меня есть на данный момент: заблокировать весь общедоступный доступ Отключить Блокировать общедоступный доступ к сегментам и объектам, предоставленным через новые списки управления доступом (ACL) Отключить блокировать общедоступный доступ к сегментам и объектам, предоставленным через любые списки управления доступом (ACL) Отключить блокировать общедоступный доступ к сегментам и объектам, предоставленным через новый общедоступный сегмент или политики точек доступа отключены Блокировка общего и межаккаунтного доступа к корзинам и объектам через любую общедоступную корзину или политики точек доступа Отключены
3. Использует ли корзина шифрование KMS?
4. Я отключил
Default Encryption
его при создании корзины.
Ответ №1:
Я понял, что было не так. Мне не хватало этой строки кода в settings.py
файле моей папки приложения. Добавление этого решило проблему, и теперь появляются изображения.
AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
Ответ №2:
Я проверил, и ваш файл доступен для публикации, как и ожидалось:
curl https://django-plantin-bugtracker-files.s3.amazonaws.com/profile_pics/aragorn_SztKYs6.jpg
Accept-Ranges: bytes
Content-Type: image/jpeg
Content-Length: 17532
Так что это не проблема с политикой корзины или S3. Это должно быть что-то специфичное для вашего приложения.