【问题标题】:FastAPI return image as JSONFastAPI 以 JSON 格式返回图像
【发布时间】:2022-08-18 20:53:12
【问题描述】:

我有一个用于随机茶照片的 API,但希望它以 JSON 格式返回照片作为不和谐机器人和事物的 URL。这是我到目前为止所拥有的:

def getRandomFile(path):
  \"\"\"
  Returns a random filename, chosen among the files of the given path.
  \"\"\"
  files = os.listdir(path)
  index = random.randrange(0, len(files))
  return files[index]



@app.get(\"/\")
async def home():
  return RedirectResponse(\"/docs\")

@app.get(\"/tea\")
def tea():
    x = \"teacuppics/{}\".format(getRandomFile(\"teacuppics\"))
    return FileResponse(x)

如何将图像的回复交换为 JSON 回复?

    标签: python json python-3.x fastapi


    【解决方案1】:

    您可以使用static files 目录来提供静态文件,例如图像。在static 目录中包含您的teacuppics 文件夹,并在该目录中安装StaticFiles() 实例。然后,您可以使用request.url_for() 函数获取随机选择的图像的 URL。下面的例子:

    from fastapi.staticfiles import StaticFiles
    from fastapi import FastAPI, Request
    
    app = FastAPI()
    
    app.mount("/static", StaticFiles(directory="static"), name="static")
      
    @app.get('/tea')
    def tea(request: Request):
        img = "teacuppics/{}".format(getRandomFile("static/teacuppics"))
        img_url = request.url_for('static', path=img)
        return {'img_url': img_url}
    

    【讨论】:

      【解决方案2】:

      您可以使用 request.url_for 根据主机生成 url。 (在 localhost 上它将是 127.0.0.1,在托管上它将是 www.your-page.com)。参数是函数的名称。它也解决了here

      
      from fastapi import FastAPI, Request
      from fastapi.responses import FileResponse
      from fastapi.responses import JSONResponse
      
      
      app = FastAPI(title='FASTAPI BLANK', version='1')
      
      
      @app.get("/tea/{img}")
      async def tea(img: str) -> FileResponse:
          return FileResponse(img)
      
      
      @app.get('/json_tea')
      async def tea2(request: Request) -> JSONResponse:
          rnd_pic = '11dfdvf.jpg'
          pic_url = request.url_for('tea', img=rnd_pic)
          return JSONResponse(content={'teacuppics': pic_url})
      
      

      【讨论】:

      • 我正在尝试获取图像 URL。我已经设法让它以图像名称而不是随机图像的 Image:URL 响应
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-20
      • 2014-04-29
      • 2019-09-16
      • 1970-01-01
      • 2011-06-11
      • 2013-08-06
      • 2011-01-08
      相关资源
      最近更新 更多