from fastapi import FastAPI, File, UploadFile, Request from fastapi.responses import HTMLResponse from fastapi.staticfiles import StaticFiles from fastapi.templating import Jinja2Templates import shutil import os from datetime import datetime app = FastAPI() BASE_DIR = "/mnt/data" UPLOAD_DIR = os.path.join(BASE_DIR, "uploads") # Only create 'uploads', not '/mnt/data' if not os.path.exists(UPLOAD_DIR): os.makedirs(UPLOAD_DIR) app.mount("/uploads", StaticFiles(directory=UPLOAD_DIR), name="uploads") templates = Jinja2Templates(directory="templates") @app.post("/upload") async def upload_image(file: UploadFile = File(...)): filename = datetime.now().strftime("%Y%m%d_%H%M%S_") + file.filename file_path = os.path.join(UPLOAD_DIR, filename) with open(file_path, "wb") as buffer: shutil.copyfileobj(file.file, buffer) return {"message": "Image uploaded", "filename": filename} @app.get("/gallery", response_class=HTMLResponse) async def show_gallery(request: Request): images = os.listdir(UPLOAD_DIR) images.sort(reverse=True) recent_images = images[:5] return templates.TemplateResponse("gallery.html", {"request": request, "images": recent_images})