Spaces:
Paused
Paused
| 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) | |
| async def index(request: Request): | |
| return templates.TemplateResponse("index.html", {"request": request}) | |
| 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)}"} | |
| ) |