diff --git a/app/main.py b/app/main.py index 288a9a4..50a48de 100644 --- a/app/main.py +++ b/app/main.py @@ -1,8 +1,7 @@ from pathlib import Path -from fastapi import FastAPI, Request, Response +from fastapi import FastAPI from fastapi.staticfiles import StaticFiles -from starlette.middleware.base import BaseHTTPMiddleware from app.config import UPLOAD_DIR from app.database import init_db @@ -11,21 +10,20 @@ from app.routers import web, api app = FastAPI(title="Mailova 星笺") UPLOAD_DIR.mkdir(exist_ok=True) + + +# Cache-Control for uploaded images (30 days, immutable — filenames contain UUID) +@app.middleware("http") +async def cache_control_middleware(request, call_next): + response = await call_next(request) + if request.url.path.startswith("/uploads/"): + response.headers["Cache-Control"] = "public, max-age=2592000, immutable" + return response + + app.mount("/static", StaticFiles(directory=str(Path(__file__).resolve().parent / "static")), name="static") app.mount("/uploads", StaticFiles(directory=str(UPLOAD_DIR)), name="uploads") - -# Browser cache: 30 days for uploaded images (they never change) -class CacheControlMiddleware(BaseHTTPMiddleware): - async def dispatch(self, request: Request, call_next): - response: Response = await call_next(request) - if request.url.path.startswith("/uploads/"): - response.headers["Cache-Control"] = "public, max-age=2592000, immutable" - return response - - -app.add_middleware(CacheControlMiddleware) - app.include_router(web.router) app.include_router(api.router)