Files
autobro_backend/utils.py
2025-07-07 19:50:54 +05:00

54 lines
1.8 KiB
Python

import os
import uuid
from fastapi import UploadFile
from pathlib import Path
# Путь для сохранения изображений
IMAGES_DIR = Path("static/images")
# Разрешенные типы файлов
ALLOWED_EXTENSIONS = {".jpg", ".jpeg", ".png", ".gif", ".webp"}
async def save_image(file: UploadFile) -> str:
"""
Сохраняет изображение в директорию и возвращает относительный путь к нему
"""
if not file:
return None
# Получаем расширение файла
_, ext = os.path.splitext(file.filename)
if ext.lower() not in ALLOWED_EXTENSIONS:
raise ValueError(f"Неподдерживаемый формат файла. Поддерживаемые форматы: {', '.join(ALLOWED_EXTENSIONS)}")
# Создаем уникальное имя файла
filename = f"{uuid.uuid4()}{ext}"
file_path = IMAGES_DIR / filename
# Создаем директорию, если не существует
os.makedirs(IMAGES_DIR, exist_ok=True)
# Сохраняем файл
contents = await file.read()
with open(file_path, "wb") as f:
f.write(contents)
# Возвращаем относительный путь для хранения в базе данных
return f"/static/images/{filename}"
def delete_image(image_path: str) -> None:
"""
Удаляет файл изображения, если оно существует
"""
if not image_path:
return
# Удаляем первый слэш из пути, если есть
if image_path.startswith("/"):
image_path = image_path[1:]
full_path = Path(image_path)
if full_path.exists():
os.unlink(full_path)