|
from fastapi import APIRouter, UploadFile, File |
|
import os |
|
import shutil |
|
import uuid |
|
|
|
router = APIRouter(tags=["files"]) |
|
|
|
|
|
session_files = {} |
|
|
|
|
|
UPLOAD_ROOT = "uploaded_files" |
|
os.makedirs(UPLOAD_ROOT, exist_ok=True) |
|
|
|
@router.post("/upload") |
|
async def upload_file(file: UploadFile = File(...)): |
|
""" |
|
Upload a file to the server and generate a session ID |
|
|
|
Args: |
|
file: The file to upload |
|
|
|
Returns: |
|
Dictionary with filename, status and session_id |
|
""" |
|
|
|
if not file.filename.endswith(('.pdf', '.txt', '.html', '.md')): |
|
return {"error": "Only PDF, TXT, HTML and MD files are accepted"} |
|
|
|
|
|
session_id = str(uuid.uuid4()) |
|
|
|
|
|
session_dir = os.path.join(UPLOAD_ROOT, session_id) |
|
uploaded_files_dir = os.path.join(session_dir, "uploaded_files") |
|
os.makedirs(uploaded_files_dir, exist_ok=True) |
|
|
|
|
|
file_path = os.path.join(uploaded_files_dir, file.filename) |
|
|
|
|
|
with open(file_path, "wb") as buffer: |
|
shutil.copyfileobj(file.file, buffer) |
|
|
|
|
|
session_files[session_id] = file_path |
|
|
|
|
|
print(f"DEBUG UPLOAD: File uploaded with session_id: {session_id}") |
|
print(f"DEBUG UPLOAD: Current session_files: {session_files}") |
|
|
|
return {"filename": file.filename, "status": "uploaded", "session_id": session_id} |