Невозможно загрузить изображения в Django Project на AWS S3, несмотря на настройку ImageField и хранилища
Я работаю над проектом Django и успешно подключил его к AWS S3 для хранения медиафайлов. Однако я не могу загрузить изображения через панель администратора Django. Статьи, содержащие только текст, загружаются нормально, но как только я пытаюсь загрузить изображение, возникают проблемы, и загрузка не происходит. Я настроил ImageField в своей модели и настроил хранилище AWS S3, но загрузка изображений по-прежнему не работает.
class Article(models.Model):
CATEGORY_CHOICES = [
('TECH', 'Technology'),
('PHI', 'Philosophy'),
('SCI', 'Science'),
('CUL', 'Culture'),
('BUS', 'Business'),
]
title = models.CharField(max_length=200)
content = models.TextField()
author = models.CharField(max_length=100)
published_date = models.DateTimeField(default=now)
is_published = models.BooleanField(default=False) # Control publishing status
image = models.ImageField(upload_to='articles/', blank=True, null=True)
is_featured = models.BooleanField(default=False)
category = models.CharField(default= False, max_length=10, choices=CATEGORY_CHOICES)
def __str__(self):
return self.title
AWS S3 Bucket permissions: Я убедился, что в моем ведре AWS S3 разрешен публичный доступ, а также установлены необходимые разрешения на запись объектов.
STATIC_URL = f"https://{AWS_STORAGE_BUCKET_NAME}.s3.{AWS_S3_REGION_NAME}.amazonaws.com/static/"
MEDIA_URL = f"https://{AWS_STORAGE_BUCKET_NAME}.s3.{AWS_S3_REGION_NAME}.amazonaws.com/media/"
MEDIA_URL = f"https://{AWS_STORAGE_BUCKET_NAME}.s3.{AWS_S3_REGION_NAME}.amazonaws.com/media/"
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': getenv('PGDATABASE'),
'USER': getenv('PGUSER'),
'PASSWORD': getenv('PGPASSWORD'),
'HOST': getenv('PGHOST'),
'PORT': getenv('PGPORT', 5432),
'DISABLE_SERVER_SIDE_CURSORS': True,
}
}
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
Устранение неполадок:
Я подтвердил, что приложение Django имеет доступ через Интернет к AWS S3.
Я проверил, что ведро S3 правильно настроено с правильным регионом и разрешениями.
Я также установил FILE_UPLOAD_MAX_MEMORY_SIZE в settings.py на 10MB.
Я попробовал повторно загрузить изображения с разными размерами файлов, но проблема сохраняется.
Несмотря на все эти шаги, проблема, при которой изображения не загружаются, а текстовый контент работает нормально, по-прежнему существует.
Журнал ошибок выглядит следующим образом:
File "/opt/venv/lib/python3.13/site-packages/django/utils/deprecation.py", line 129, in __call__
response = response or self.get_response(request)
~~~~~~~~~~~~~~~~~^^^^^^^^^
File "/opt/venv/lib/python3.13/site-packages/django/core/handlers/exception.py", line 55, in inner
response = get_response(request)
File "/opt/venv/lib/python3.13/site-packages/django/utils/deprecation.py", line 129, in __call__
response = response or self.get_response(request)
~~~~~~~~~~~~~~~~~^^^^^^^^^
~~~~~~~~~~~~~~~~~^^^^^^^^^
File "/opt/venv/lib/python3.13/site-packages/django/core/handlers/exception.py", line 55, in inner
response = get_response(request)
File "/opt/venv/lib/python3.13/site-packages/django/utils/deprecation.py", line 129, in __call__
response = response or self.get_response(request)
~~~~~~~~~~~~~~~~~^^^^^^^^^
File "/opt/venv/lib/python3.13/site-packages/django/core/handlers/exception.py", line 55, in inner
response = get_response(request)
File "/opt/venv/lib/python3.13/site-packages/whitenoise/middleware.py", line 123, in __call__
return self.get_response(request)
~~~~~~~~~~~~~~~~~^^^^^^^^^
File "/opt/venv/lib/python3.13/site-packages/django/core/handlers/exception.py", line 55, in inner
response = get_response(request)
File "/opt/venv/lib/python3.13/site-packages/django/core/handlers/base.py", line 185, in _get_response
response = middleware_method(
Дополнительная информация:
База данных: Недавно я перевел свой проект Django с локальной базы данных PostgreSQL на NeonDB для облачного хостинга. Этот переход, похоже, не связан с проблемой загрузки изображений, но потенциально может быть полезен, если есть косвенное влияние.
AWS S3 Region: eu-north-1
Бэкенд хранилища: django-storages