Spaces:
Sleeping
Sleeping
from fastapi import APIRouter, HTTPException, Query | |
from fastapi.responses import FileResponse | |
import os | |
router = APIRouter() | |
def download_file(file_path: str = Query(..., description="Relative path from project root")): | |
print(f"π Requested file path: {file_path}") | |
# Sanitize and resolve absolute path | |
full_path = os.path.abspath(file_path) | |
# Ensure file is inside your allowed folder (to prevent directory traversal) | |
allowed_root = os.path.abspath("generated") | |
if not full_path.startswith(allowed_root): | |
raise HTTPException(status_code=400, detail="Invalid file path") | |
print(f"π Resolved full path: {full_path}") | |
if not os.path.isfile(full_path): | |
print("β File not found.") | |
raise HTTPException(status_code=404, detail="File not found") | |
# Set correct media type dynamically (you can refine this later) | |
media_type = "audio/mpeg" if full_path.endswith(".mp3") else "image/png" | |
return FileResponse( | |
full_path, | |
media_type=media_type, | |
filename=os.path.basename(full_path) | |
) | |