27 lines
891 B
Python
27 lines
891 B
Python
from __future__ import annotations
|
|
|
|
from app.dependencies.storage import get_storage_service
|
|
from app.storage import LocalStorageService, StorageService
|
|
|
|
from fastapi import APIRouter, Depends, HTTPException
|
|
from fastapi.responses import FileResponse
|
|
|
|
file_router = APIRouter(prefix="/file", include_in_schema=False)
|
|
|
|
|
|
@file_router.get("/{path:path}")
|
|
async def get_file(path: str, storage: StorageService = Depends(get_storage_service)):
|
|
if not isinstance(storage, LocalStorageService):
|
|
raise HTTPException(404, "Not Found")
|
|
if not await storage.is_exists(path):
|
|
raise HTTPException(404, "Not Found")
|
|
|
|
try:
|
|
return FileResponse(
|
|
path=storage._get_file_path(path),
|
|
media_type="application/octet-stream",
|
|
filename=path.split("/")[-1],
|
|
)
|
|
except FileNotFoundError:
|
|
raise HTTPException(404, "Not Found")
|