fix: Add fallback support for old image file formats

- Added default_storage import to ImageService
- Implemented fallback logic in get_url() method
- First tries new format (.webp for non-original, .jpg for original)
- Falls back to old format (all .jpg) for backward compatibility
- Ensures old photos continue to work with new configuration
- Prevents broken links when migrating to new format

This allows gradual transition from old to new image format without breaking existing image links.

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-10-22 23:41:17 +03:00
parent f12fd18190
commit 75c89e3f7e

View File

@@ -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}"