python - python - 如何從FastAPI端點返回dict +圖像?

我正嘗試使用FastAPI(dockerized)伺服器響應返回

  • 圖像image
  • 詞典additional_dict

我可以使用下列代碼,成功地將圖像作為二進位文件返回:


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")



但是,我不知道如何把圖像二進位和字典組合在一起。

我試圖將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


}]




是否可以在swager UI /docs中呈現圖像並讀取其中的dict值?

时间: 原作者:

可以用base編碼二進位數據,並通過dictionary發送編碼的字元串。


 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


 }



在前端,你可以解碼一個從base string到bytes的圖像,並將它呈現給用戶。

原作者:
...