您的位置:

最佳方案处理fastapi HTTPException(422,detail={"name": "ContentSizeLimitExceeded","code": 999,"message": "File limit exceeded",},)

  发布时间:2023-01-30 04:30:02
报错的原因FastAPI会在上传文件大小超过限制时引发HTTPException。如何解决解决这个问题的方法有以下几种:增加文件大小限制:在FastAPI中设置更大的文件大小限制。对上传的文件进行压缩或分片在服务端对上传的文件进行处理使用第三方存储服务这些例子是FastAPI的简单示例,实际应用中还需要考虑更多的细节,请根据实际情况进行调整。

报错的原因

FastAPI会在上传文件大小超过限制时引发HTTPException(422)。其中,"ContentSizeLimitExceeded"是错误的名称,"code"是999,"message"是"File limit exceeded"。这意味着上传的文件大小超过了FastAPI中设置的限制。

如何解决

解决这个问题的方法有以下几种:

1. 增加文件大小限制:在FastAPI中设置更大的文件大小限制。

2. 在客户端限制文件大小:在客户端(例如浏览器)上限制上传的文件大小。

3. 对上传的文件进行压缩或分片:在客户端上压缩文件或将大文件分成多个小文件上传。

4. 在服务端对上传的文件进行处理:在服务端上对上传的文件进行压缩或分片。

5. 使用第三方存储服务:使用第三方存储服务(例如Amazon S3或Google Cloud Storage)来存储上传的文件。

根据实际情况进行选择使用即可。

使用例子

是的,下面是一些例子:

1. 增加文件大小限制:


from fastapi import FastAPI, File, UploadFile

app = FastAPI()

@app.post("/uploadfile/")
async def create_upload_file(file: bytes = File(..., max_size=1024 * 1024 * 10)): # file size limit is 10MB
    return {"filename": file.filename}

2. 在客户端限制文件大小:

如果你使用HTML表单上传文件,可以在 input[type="file"] 标签上添加 accept="image/*" 属性限制上传的文件类型,

size 属性限制上传文件的大小。

3. 对上传的文件进行压缩或分片:


import os
import zipfile

from fastapi import FastAPI, File, UploadFile

app = FastAPI()

@app.post("/uploadfile/")
async def create_upload_file(file: UploadFile):
    with zipfile.ZipFile(file.file, mode='w') as zf:
        zf.write(file.filename)
    return {"filename": file.filename}

4. 在服务端对上传的文件进行处理:


import os
from PIL import Image
from fastapi import FastAPI, File, UploadFile

app = FastAPI()

@app.post("/uploadfile/")
async def create_upload_file(file: UploadFile):
    img = Image.open(file.file)
    img.save(os.path.join(os.getcwd(), 'compressed', file.filename))
    return {"filename": file.filename}

5. 使用第三方存储服务:


import boto3
from fastapi import FastAPI, File, UploadFile

app = FastAPI()

s3 = boto3.client("s3")

@app.post("/uploadfile/")
async def create_upload_file(file: UploadFile):
    s3.upload_fileobj(file.file, "my-bucket", file.filename)
    return {"filename": file.filename}

这些例子是FastAPI的简单示例,实际应用中还需要考虑更多的细节,请根据实际情况进行调整。