【发布时间】:2021-04-19 07:59:04
【问题描述】:
我正在尝试使用请求将 JSON 数据 + 文件(二进制)上传到 FastAPI 'POST' 端点。
这是服务器代码:
@app.post("/files/")
async def create_file(
file: bytes = File(...), fileb: UploadFile = File(...), timestamp: str = Form(...)
):
return {
"file_size": len(file),
"timestamp": timestamp,
"fileb_content_type": fileb.content_type,
}
这是客户端代码:
session = requests.Session()
adapter = requests.adapters.HTTPAdapter(max_retries=0)
session.mount('http://', adapter)
jpg_image = open(IMG_PATH, 'rb').read()
timestamp_str = datetime.datetime.now().isoformat()
files = {
'timestamp': (None, timestamp_str),
'file': ('image.jpg', jpg_image),
}
request = requests.Request('POST',
FILE_UPLOAD_ENDPOINT,
files=files)
prepared_request = request.prepare()
response = session.send(prepared_request)
服务器失败
“POST /files/ HTTP/1.1”422 无法处理的实体
【问题讨论】:
-
为了清楚起见,请在您的问题中添加 422 响应的正文。
-
对于它的价值,状态为
422的响应来自fastapi.exception_handlers.request_validation_exception_handler(req, exc),如果您处于开发阶段,您可以设置断点然后从exc获取有关错误的更多详细信息( exception object) ,该异常应描述缺少字段fileb,这意味着在您的客户端代码中,您还应该在请求正文中指定相同的字段名称fileb
标签: python-requests fastapi uvicorn http-status-code-422