33 lines
1.4 KiB
Python
33 lines
1.4 KiB
Python
from fastapi import File, UploadFile, HTTPException, Depends
|
|
from fastapi.security import HTTPAuthorizationCredentials
|
|
from sqlalchemy.orm import Session
|
|
from pathlib import Path
|
|
from urllib.parse import urljoin
|
|
from fastapi import Request
|
|
|
|
BASE_URL = "http://127.0.0.1:8000"
|
|
|
|
def get_upload_dir(user_id: int) -> Path:
|
|
"""Возвращает путь для сохранения файлов пользователя."""
|
|
upload_dir = Path(f"res/user/{user_id}")
|
|
upload_dir.mkdir(parents=True, exist_ok=True)
|
|
return upload_dir
|
|
|
|
def get_poster_dir(poster_id: int) -> Path:
|
|
"""Возвращает путь для сохранения обложек постеров."""
|
|
poster_dir = Path(f"res/poster/{poster_id}")
|
|
poster_dir.mkdir(parents=True, exist_ok=True)
|
|
return poster_dir
|
|
|
|
def save_file(file: UploadFile, target_dir: Path) -> Path:
|
|
"""Сохраняет файл в указанной директории и возвращает путь к файлу."""
|
|
file_path = target_dir / file.filename
|
|
with open(file_path, "wb") as f:
|
|
f.write(file.file.read())
|
|
return file_path
|
|
|
|
def generate_file_url(request: Request, file_path: Path) -> str:
|
|
"""Генерирует URL для доступа к файлу."""
|
|
relative_path = file_path.relative_to(Path("res"))
|
|
return urljoin(str(request.base_url), f"res/{relative_path}")
|