如何在FastAPIPOST请求中同时添加文件和JSON正文?

具体来说,我希望以下示例能够正常工作:

from typing import List
from pydantic import BaseModel
from fastapi import FastAPI, UploadFile, File


app = FastAPI()


class DataConfiguration(BaseModel):
    textColumnNames: List[str]
    idColumn: str


@app.post("/data")
async def data(dataConfiguration: DataConfiguration,
               csvFile: UploadFile = File(...)):
    pass
    # read requested id and text columns from csvFile

如果这不是 POST 请求的正确方法,请告诉我如何从 FastAPI 中上传的 CSV 文件中选择所需的列。

回答

您不能将表单数据与 json 混合使用。

根据 FastAPI文档:

警告:您可以声明多个FileForm参数的路径运行,但你不能同时申报Body,您希望收到的JSON字段,请求将身体用编码multipart/form-data代替application/json。这不是 FastAPI 的限制,它是 HTTP 协议的一部分。

但是,您可以Form(...)将额外的字符串附加为form-data

from typing import List
from fastapi import FastAPI, UploadFile, File, Form


app = FastAPI()


@app.post("/data")
async def data(textColumnNames: List[str] = Form(...),
               idColumn: str = Form(...),
               csvFile: UploadFile = File(...)):
    pass


以上是如何在FastAPIPOST请求中同时添加文件和JSON正文?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>