Ale*_*ill 5 python-requests http-status-code-422 fastapi uvicorn
我正在尝试使用请求将 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,
}
Run Code Online (Sandbox Code Playgroud)
这是客户端代码:
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)
Run Code Online (Sandbox Code Playgroud)
服务器失败并显示
“POST /files/ HTTP/1.1” 422 无法处理的实体
当请求正文缺少必填字段或存在非预期字段等时,FastAPI 端点通常会响应 422。
您似乎缺少fileb请求正文中的 。
如果此字段是可选的,则必须在端点定义中按如下方式声明它:
fileb: Optional[UploadFile] = File(None)
Run Code Online (Sandbox Code Playgroud)
您还需要在端点代码中进行一些检查......
如果它是必填字段,那么您需要将其添加到请求正文中。
| 归档时间: |
|
| 查看次数: |
9966 次 |
| 最近记录: |