【发布时间】:2021-08-16 03:12:07
【问题描述】:
我有一个存储文件和附加信息的应用程序,例如作者,cmets DB。我可以将文件传递给 FastAPI,但通过将其与参数一起传递会出现问题。
我检查了以下问题How to add multiple body params with fileupload in FastAPI? 和这个问题[QUESTION] Use UploadFile in Pydantic model #657 ,但没有成功。
我在 FastAPI 端点中尝试了 2 个定义
选项 1
class Properties(BaseModel):
language: Optional[str] = None
author: Optional[str] = None
@app.post("/uploadfile/")
async def uploadfile(params: Properties, file: UploadFile = File(...)):
#internal logic
选项 2
@app.post("/uploadfile/")
async def uploadfile(file: UploadFile = File(...),
language: str = Form(...),
author: Optional[str] = Form(None)):
#internal logic
客户端代码: 以下代码用于客户端,但两个选项的响应都是 422 Unprocessable Entity。
with open(path, 'rb') as f:
response = requests.post('http://localhost:8005/uploadfile/', data={'language':'en',
'author':'me'}, files={'file': f})
这两个选项都无法通过 swagger 进行测试,我得到了回应:value is not a valid dict。数据对我来说看起来不错,但也许我遗漏了一些东西。
好像是客户端代码有问题,还有我试了好几次都没有成功。
提前感谢您的支持!
适合我的解决方案
正如“Drdilyor”在他的评论中所写,我使用选项 2,因为我们正在发送文件。我的问题在争论的顺序之内。更改它们后,一切都开始工作了。
【问题讨论】:
-
我尝试通过
data={'params': ''}并以某种方式返回 200 -
这对我不起作用。然而,您的评论帮助我从另一个角度思考这个问题。谢谢!
标签: python python-3.x post fastapi