如何在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文档:
警告:您可以声明多个
File和Form参数的路径运行,但你不能同时申报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