-
Notifications
You must be signed in to change notification settings - Fork 0
/
middleware.py
21 lines (18 loc) · 906 Bytes
/
middleware.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from starlette.middleware.base import BaseHTTPMiddleware
from fastapi import FastAPI, Body, Request
from starlette.responses import PlainTextResponse
from starlette.status import HTTP_413_REQUEST_ENTITY_TOO_LARGE
class LimitContentSizeMiddleware(BaseHTTPMiddleware):
def __init__(self, app, max_content_size: int):
super().__init__(app)
self.max_content_size = max_content_size
async def dispatch(self, request: Request, call_next):
if request.method == "POST" and request.headers.get("content-length"):
content_length = int(request.headers["content-length"])
if content_length > self.max_content_size:
return PlainTextResponse(
"Request content too large",
status_code=HTTP_413_REQUEST_ENTITY_TOO_LARGE,
)
response = await call_next(request)
return response