fastapi-demo / main.py
heboya8's picture
Update main.py
bfd489d verified
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)}"}
)