from fastapi import FastAPI, File, UploadFile, Request from fastapi.templating import Jinja2Templates from fastapi.staticfiles import StaticFiles from PIL import Image import os import uuid import logging import shutil # Configure logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) app = FastAPI() # Mount static files app.mount("/static", StaticFiles(directory="static"), name="static") # Set up templates templates = Jinja2Templates(directory="templates") # Set upload folder UPLOAD_FOLDER = "static/uploads" os.makedirs(UPLOAD_FOLDER, exist_ok=True) @app.get("/") async def index(request: Request): return templates.TemplateResponse("index.html", {"request": request}) @app.post("/upload") async def upload_file(request: Request, file: UploadFile = File(...)): try: # Save uploaded file filename = f"{uuid.uuid4()}{os.path.splitext(file.filename)[1]}" filepath = os.path.join(UPLOAD_FOLDER, filename) # Write file content with open(filepath, "wb") as f: shutil.copyfileobj(file.file, f) logger.info(f"File saved: {filename}") # Verify and resize image image = Image.open(filepath).convert("RGB") image = image.resize((800, 600)) # Resize for consistent display image.save(filepath) logger.info(f"Image resized and saved: {filename}") return templates.TemplateResponse( "results.html", {"request": request, "image": f"/static/uploads/{filename}"} ) except Exception as e: logger.error(f"Error processing file: {str(e)}") return templates.TemplateResponse( "index.html", {"request": request, "error": f"Error processing file: {str(e)}"} )