From 6c5b20a35b020eca1c93d2f6190ea43a08c2dde5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=98=D0=B3=D0=BE=D1=80=D1=8C=20=D0=9D=D0=B0=D0=B4=D0=B5?= =?UTF-8?q?=D0=B8=D0=BD?= Date: Tue, 2 Dec 2025 11:35:23 +0300 Subject: [PATCH] =?UTF-8?q?fix:=20Base64ImageField=20=D1=82=D0=B5=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D1=8C=20=D0=BA=D0=BE=D1=80=D1=80=D0=B5=D0=BA=D1=82?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=B0=D1=82=D1=8B?= =?UTF-8?q?=D0=B2=D0=B0=D0=B5=D1=82=20=D0=BF=D1=83=D1=81=D1=82=D1=8B=D0=B5?= =?UTF-8?q?=20=D1=84=D0=B0=D0=B9=D0=BB=D1=8B=20(size=3D0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/api/v1/serializers.py | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/backend/api/v1/serializers.py b/backend/api/v1/serializers.py index d9ed2066..968d8401 100644 --- a/backend/api/v1/serializers.py +++ b/backend/api/v1/serializers.py @@ -116,8 +116,34 @@ class Base64ImageField(serializers.ImageField): # Если это не строка (например, InMemoryUploadedFile) logger.info( - f"[Base64ImageField] Не строка, передаем в parent as-is" + "[Base64ImageField] Не строка, передаем в parent as-is" ) + + # КРИТИЧНО: проверяем, не пустой ли файл + if hasattr(data, 'size') and data.size == 0: + logger.warning( + "[Base64ImageField] Пустой файл (size=0), " + "возвращаем None" + ) + return None + + if hasattr(data, 'read'): + # Проверяем содержимое файла + try: + content = data.read() + if hasattr(data, 'seek'): + data.seek(0) + if not content or len(content) == 0: + logger.warning( + "[Base64ImageField] Файл пустой (len=0), " + "возвращаем None" + ) + return None + except Exception as e: + logger.error( + f"[Base64ImageField] Ошибка чтения файла: {e}" + ) + result = super().to_internal_value(data) logger.info( f"[Base64ImageField] Parent validation passed, "