我有一个存储文件和其他信息的应用程序,例如作者、评论数据库。我可以将一个文件传递给FastAPI,但通过将其与参数一起传递会产生问题
我检查了下面的问题How to add multiple body params with fileupload in FastAPI?和这个问题[QUESTION] Use UploadFile in Pydantic model #657 ,但没有成功
我在FastAPI端点中尝试了两种定义
选项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不可处理实体
with open(path, 'rb') as f:
response = requests.post('http://localhost:8005/uploadfile/', data={'language':'en',
'author':'me'}, files={'file': f})
这两个选项都无法从swagger测试,我得到的回答是:值不是有效的dict。数据对我来说很好,但也许我遗漏了什么
似乎客户端代码是错误的,但我也尝试了一些更改,但没有成功
提前感谢您的支持
适合我的解决方案
正如“Dilyor博士”在他的评论中所写,我使用了选项2,因为我们正在发送文件。我的问题在争论的顺序之内。更换后,一切都开始工作
根据this issue,在我看来这是一个HTTP限制,我们必须要么使用
application/json
要么使用multipart/formdata
,但不能同时使用两者。因为我们正在上传文件,所以必须使用^。这段代码(以某种方式)起作用:我试了一下
curl http://localhost:8000/uploadfile/ -X POST -F author=me -F language=en -F file=@/path/to/file
,不确定requests
我想您也可以使用查询参数
相关问题 更多 >
编程相关推荐