add: car image support
This commit is contained in:
53
utils.py
Normal file
53
utils.py
Normal file
@ -0,0 +1,53 @@
|
||||
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)
|
Reference in New Issue
Block a user