如何限制Python Fastapi Post请求上传文件大小?
我正在创建一个fastapi python应用程序,其中用户上传要处理的文件。我不希望该文件超过大小x(在字节中)。
在邮政请求将文件存储在内存中之前,如何限制文件上传大小?
我正在使用Uivcorn进行测试,但我希望可以使用Google Cloud Platform(GCP)部署此代码。我不确定是否可以在Python代码端或服务器配置侧进行此操作。
代码段:
from fastapi import (
FastAPI,
Path,
File,
UploadFile,
)
app = FastAPI()
@app.post("/")
async def root(file: UploadFile = File(...)):
text = await file.read()
text = text.decode("utf-8")
return len(text)
I am creating a FastAPI Python application where a user uploads a file to be processed. I do not want the file to exceed size X (in bytes).
How do I limit the file upload size before the POST request stores the file in memory?
I am using uivcorn for testing but I am expecting to deploy this code with Google Cloud Platform (GCP). I am not sure if this can be done on the python code-side or server configuration-side.
Code Snippet:
from fastapi import (
FastAPI,
Path,
File,
UploadFile,
)
app = FastAPI()
@app.post("/")
async def root(file: UploadFile = File(...)):
text = await file.read()
text = text.decode("utf-8")
return len(text)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我找到了一个Python库,可以通过Fastapi中间件来照顾这一点。如果上传文件太大,它将抛出413 HTTP错误; “错误:请求实体太大”
I found a python library that takes care of this via FastAPI middleware. If the upload file is too large it will throw a 413 HTTP error; "Error: Request Entity Too Large"
它通常通过Web服务器(例如Nginx或Apache)控制,但是如果要在服务器端控制,则可以使用此代码:
it usually controls by web server like nginx or Apache but if you want to control in the server side you can use this code:
您可以使用中间件。我使用了此一个,它的用法很不错
(我更改了原始代码a位):
middleware.py:
main.py:
此解决方案仅读取文件的必要部分,并拒绝请求
以此starlette视图为例:
如果最大文件大小为5MB,并且上传的文件为50MB,则此实现在拒绝请求之前,将整个50MB读取到内存中。
You can use middleware. I used this one and it works nice
Usage (I change the original code a bit):
middleware.py:
main.py:
This solution reads only the necessary part of the file and reject the request
Take this Starlette view for example:
If the maximum file size is 5MB, and the uploaded file was 50MB, then this implementation reads the entire 50MB into memory before rejecting the request.
我正在使用fastapi。我在端点中用用过uploadfile。
I am using FastAPI. I used UploadFile in the endpoint.