fastapi 的 swagger response 怎么声明 media_type?

@app.post('/snapshot')

def snapshot(

url: str = Form()

):

proxy = get_proxy()

with ChromeBrowser(driver_path=driver_path, proxy_string=proxy) as browser:

# 截图

logger.info(f'获得代理: {proxy}')

jpg_stream: bytes = browser.snapshot(url)

logger.debug(f'获取截图, 大小为 {round(len(jpg_stream)/1024,3)} KBytes')

image_stream = BytesIO(jpg_stream)

return StreamingResponse(image_stream, media_type="image/jpg")

有上面的接口,response body 不是一般的 json,而是一个图片流,所以我要怎么声明,才能让访问 /docs 的时候,让别人可以知道这个接口返回的是 image/jpg 而不是 json

fastapi 的 swagger response 怎么声明 media_type?


回答:

不需要声明,响应头中的Content-Type就会告诉客户端你的响应是什么类型。


docs 里的 media_type 是通过 response_class 实现的,需要自定义 response_class 才能修改。

from fastapi import FastAPI

from fastapi.responses import StreamingResponse

app = FastAPI()

class MyCustomResponse(StreamingResponse):

media_type = "image/jpeg" # 将文件类型写在这里

@app.get("/img", response_class=MyCustomResponse) # 指定 MyCustomResponse

def image():

def iterfile():

with open("./image.jpg", mode="rb") as file_like:

yield from file_like

return MyCustomResponse(iterfile())

fastapi 的 swagger response 怎么声明 media_type?

以上是 fastapi 的 swagger response 怎么声明 media_type? 的全部内容, 来源链接: utcz.com/p/939060.html

回到顶部