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:
@@ -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}"
|
||||
|
||||
Reference in New Issue
Block a user