Django - сохраняет изображение в корзине Supabase, но изображение пустое

Я загружаю изображение через Angular - django - Supabase s3. Чтобы отправить изображение в корзину Supabase, я использую модуль django-storages. Когда я получаю изображение из supabase, изображение повреждается дополнительными байтами.

Вот мои настройки django-хранилищ

STORAGES = {
    "staticfiles": {
        "BACKEND": "django.contrib.staticfiles.storage.StaticFilesStorage",
    },
    "default": {
        "BACKEND": "storages.backends.s3.S3Storage",
        "OPTIONS": {
            "bucket_name": os.getenv('SUPABASE_STORAGE_BUCKET_NAME'),
            "region_name": os.getenv('SUPABASE_S3_REGION_NAME'),
            "access_key": os.getenv('SUPABASE_S3_ACCESS_KEY_ID'),
            "secret_key": os.getenv('SUPABASE_S3_SECRET_ACCESS_KEY'),
            "endpoint_url": os.getenv('SUPABASE_S3_ENDPOINT_URL')
        },
    }
}

Вот мой код на django для установки метода загрузки изображений для просмотра.

@action(detail=True, methods=['post'], url_path='image', parser_classes=[FormParser, MultiPartParser])
    def image_upload(self, request, pk=None):
        project = self.get_object()
        image = request.FILES['image']
        
        project.image = image
        project.save()
        projectReadSerializer = ProjectReadSerializer(project)
        return Response(data = projectReadSerializer.data)

всякий раз, когда я публикую изображение, я получаю пустое изображение из корзины supabase, в которой больше байт, чем в исходном.

Есть какие-нибудь решения?

Я попытался загрузить изображение, вот результат: исходное изображение и фрагмент изображения

Я также проверил изображение с помощью PIL, и оно показалось мне нормальным:

def image_upload(self, request, pk=None):
        project = self.get_object()
        image = request.FILES['image']

        img = Image.open(image)
        img.show()

        project.image = image
        project.save()
        projectReadSerializer = ProjectReadSerializer(project)
        return Response(data = projectReadSerializer.data)

итак, проблема в project.image = графическая часть кода, как кажется.

Итак, я нашел решение. Проблема заключалась в том, что boto3 версии 1.36 повредил файл, добавив в его конец x-amz-checksum-crc32. Я понизил версию boto3 с помощью pip install "boto3<1.36", и все работает нормально!

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