Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从FastAPI端点返回dict+图像?_Python_Fastapi - Fatal编程技术网

Python 如何从FastAPI端点返回dict+图像?

Python 如何从FastAPI端点返回dict+图像?,python,fastapi,Python,Fastapi,我试图使用FastAPI来允许我的停靠服务器响应返回的API调用 图像,以及 词典补充词典 对于机器学习示例,这可以是来自分类器和显著性映射的分类标签 在我的例子中,我认为使用相同的端点来获取两个对象是有意义的,因为它们是通过相同的计算生成的 我可以使用以下内容成功地以二进制形式返回图像: 这使我甚至可以在通过localhost:8000/docs上的swagger UI调用服务时看到图像响应 但是,我不知道如何将图像二进制和字典结合起来 我试图将我的返回语句替换为: return FileRe

我试图使用FastAPI来允许我的停靠服务器响应返回的API调用

图像,以及 词典补充词典 对于机器学习示例,这可以是来自分类器和显著性映射的分类标签

在我的例子中,我认为使用相同的端点来获取两个对象是有意义的,因为它们是通过相同的计算生成的

我可以使用以下内容成功地以二进制形式返回图像:

这使我甚至可以在通过localhost:8000/docs上的swagger UI调用服务时看到图像响应

但是,我不知道如何将图像二进制和字典结合起来

我试图将我的返回语句替换为:

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
}]
是否有可能在响应中获得来自同一端点的二进制图像和附加dict?如果是,最好的方法是什么?
是否可以在Swagger UI/docs中渲染图像并读取dict值

您可以使用base64对二进制数据进行编码,它将出现在图像中,并通过字典发送编码字符串

   import base64

   with open("image.png", "rb") as image_file:
       encoded_image_string = base64.b64encode(image_file.read())

   payload = {
       "mime" : "image/png",
       "image": encoded_image_string,
       "some_other_data": None
   }
因此,此字典将包含base64编码的图像和任何其他数据字段


在前端,您可以将图像从base64字符串解码回字节,并将其呈现给用户。

好的,谢谢!不过,理想情况下,我希望图像也能以大摇大摆的方式显示,我仍然想知道这是否有可能…@DavideFiocco您可以将图像作为传统文件发送,并在响应标题中添加其他数据。虽然不太方便,但在这种情况下,你可以通过招摇看到图像。
   import base64

   with open("image.png", "rb") as image_file:
       encoded_image_string = base64.b64encode(image_file.read())

   payload = {
       "mime" : "image/png",
       "image": encoded_image_string,
       "some_other_data": None
   }