Compare commits

..
2 Commits
3 changed files with 20 additions and 15 deletions

No files matched your search

+12 -14
View File
@@ -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)
+7 -1
View File
@@ -88,7 +88,13 @@ class S3Storage:
region: str = "auto",
public_url: str = "",
) -> None:
import boto3
try:
import boto3
except ImportError:
raise ImportError(
"boto3 is required for S3 storage. "
"Install it with: pip install boto3"
)
self.bucket = bucket
self.public_url = public_url.rstrip("/")
+1
View File
@@ -6,3 +6,4 @@ jinja2
bcrypt
python-jose[cryptography]
aiofiles
boto3