如何在FastAPI中使用fileupload添加多个正文参数?

时间:2020-10-06 19:52:31

标签: python python-3.x postman fastapi uvicorn

我有一个使用FastAPI部署的机器学习模型,但问题是我需要该模型采用两体参数

app = FastAPI()

class Inputs(BaseModel):
    industry: str = None
    file: UploadFile = File(...)

@app.post("/predict")
async def predict(inputs: Inputs):
    # params
    industry = inputs.industry
    file = inputs.file
    ### some code ###
    return predicted value

当我尝试发送输入参数时,我发现邮递员出现错误,请参见下图,

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

来自FastAPI讨论thread--(#657)

如果您使用application/json接收JSON数据,请使用常规的Pydantic模型。

这是与API通信的最常用方法。

如果您正在接收原始文件,例如图片或PDF文件存储在服务器中,然后使用UploadFile,它将作为表单数据(multipart/form-data)发送。

如果您需要接收不是JSON的某种结构化内容,但是想要以某种方式进行验证(例如,Excel文件),则仍然必须使用UploadFile上传并执行所有代码中的必要验证。您可以在自己的代码中使用Pydantic进行验证,但是在这种情况下,FastAPI无法为您这样做。

因此,在您的情况下,路由器应为

from fastapi import FastAPI, File, UploadFile, Form

app = FastAPI()


@app.post("/predict")
async def predict(
        industry: str = Form(...),
        file: UploadFile = File(...)
):
    # rest of your logic
    return {"industry": industry, "filename": file.filename}