Невозможно загрузить изображения в 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

Вернуться на верх