diff --git a/myproject/products/utils/image_service.py b/myproject/products/utils/image_service.py index 2b4e7cb..a63a142 100644 --- a/myproject/products/utils/image_service.py +++ b/myproject/products/utils/image_service.py @@ -4,6 +4,7 @@ """ import os from django.conf import settings +from django.core.files.storage import default_storage class ImageService: @@ -97,13 +98,34 @@ class ImageService: if len(parts_of_name) == 2: base_filename, file_size_key = parts_of_name # Это новый формат с явным указанием размера в имени + # Получаем расширение для целевого размера target_ext = ImageService._get_file_extension(size) - # Меняем размер в имени файла и расширение - filename = f"{base_filename}_{size}.{target_ext}" + + # Строим папку + size_folders = ImageService._get_size_folders() + folder = size_folders.get(size, 'medium') + + # Сначала пытаемся с правильным расширением из конфигурации + filename_new = f"{base_filename}_{size}.{target_ext}" + new_path_primary = f"{base_path}/{folder}/{filename_new}" + + # Если файл существует - возвращаем его + if default_storage.exists(new_path_primary): + return f"{settings.MEDIA_URL}{new_path_primary}" + + # Иначе пробуем старый формат (все .jpg) для совместимости + filename_fallback = f"{base_filename}_{size}.jpg" + new_path_fallback = f"{base_path}/{folder}/{filename_fallback}" + + if default_storage.exists(new_path_fallback): + return f"{settings.MEDIA_URL}{new_path_fallback}" + + # Если ничего не найдено, возвращаем путь с новым расширением (браузер покажет ошибку) + return f"{settings.MEDIA_URL}{new_path_primary}" # Иначе оставляем как есть - # Строим новый путь + # Строим новый путь (для старых файлов без новой структуры) size_folders = ImageService._get_size_folders() folder = size_folders.get(size, 'medium') new_path = f"{base_path}/{folder}/{filename}"