我正在尝试使用 FastAPI 来允许我的(dockerized)服务器响应返回的 API 调用
- 一个图像
image
, and
- 一本字典
additional_dict
(对于机器学习示例,这可能是来自分类器和显着性图的分类标签)。
就我而言,我认为使用相同的端点来获取两个对象是有意义的,因为它们是通过相同的计算生成的。
我可以使用类似的东西成功地将图像返回为二进制https://stackoverflow.com/a/55905051/4240413 https://stackoverflow.com/a/55905051/4240413:
from PIL import Image
from fastapi import FastAPI, File
import tempfile
from starlette.responses import FileResponse
@app.post("/getstuff")
async def get_image_and_data(file: bytes = File(...)):
image, additional_dict = process_image(image)
with tempfile.NamedTemporaryFile(mode="w+b", suffix=".png", delete=False) as outfile:
image.save(outfile)
return FileResponse(outfile.name, media_type="image/png")
当我通过 swagger UI 调用服务时,这甚至可以让我看到图像响应localhost:8000/docs
.
但是,我不知道如何获取图像二进制文件和字典一起。
我尝试将我的 return 语句替换为:
return FileResponse(outfile.name, media_type="image/png"), additional_dict
但这并没有真正起作用(当在 localhost:8000/docs 上尝试 swagger 时,我只是得到下面的 json 回复,其中包含创建的临时文件的路径)
[{
"path": "/tmp/tmpldwe_79d.png",
"status_code": 200,
"filename": null,
"send_header_only": false,
"media_type": "image/png",
"background": null,
"raw_headers": [
[
"content-type",
"image/png"
]
],
"stat_result": null
},
{
"foo": 1,
"bar": 2
}]
是否可以从同一端点获取二进制图像和附加字典的响应?如果是这样,最好的方法是什么?
是否可以在 Swagger UI 中渲染图像/docs
并读取那里的字典值?