diff --git a/MULTITENANT_PHOTO_FIX.md b/MULTITENANT_PHOTO_FIX.md index b274083..20b5ad6 100644 --- a/MULTITENANT_PHOTO_FIX.md +++ b/MULTITENANT_PHOTO_FIX.md @@ -41,6 +41,8 @@ Tenant ID добавляется/удаляется автоматически - `_get_tenant_path()` - Добавляет tenant_id в начало пути - `get_available_name()` - Проверяет уникальность на диске, но возвращает путь БЕЗ tenant_id для БД - `_save()` - Сохраняет файл с tenant_id на диск, но возвращает путь БЕЗ tenant_id для БД +- `_open()` - Открывает файл, добавляя tenant_id если необходимо (критично для Celery!) +- `path()` - Преобразует относительные пути в полные системные пути с tenant_id - `delete()` - Удаляет файлы с проверкой принадлежности тенанту (безопасность) - `exists()` - Проверяет существование с валидацией тенанта - `url()` - Генерирует URL с проверкой безопасности diff --git a/myproject/products/utils/image_service.py b/myproject/products/utils/image_service.py index f5fd6b5..67a9fdd 100644 --- a/myproject/products/utils/image_service.py +++ b/myproject/products/utils/image_service.py @@ -88,9 +88,12 @@ class ImageService: # Преобразуем thumbnail в thumb final_size_name = ImageService._normalize_size_name(size) - # Создаем путь и возвращаем URL + # Создаем путь и используем storage.url() для корректной работы с tenant-aware storage file_path = f"{base_path}/{entity_id}/{photo_id}/{final_size_name}.{extension}" - return f"{settings.MEDIA_URL}{file_path}" + + # Используем default_storage.url() для корректной работы с TenantAwareFileSystemStorage + # Это гарантирует что URL будет содержать tenant_id если необходимо + return default_storage.url(file_path) except Exception: return ''