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
回答:
不需要声明,响应头中的Content-Type
就会告诉客户端你的响应是什么类型。
docs 里的 media_type 是通过 response_class 实现的,需要自定义 response_class 才能修改。
from fastapi import FastAPIfrom 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? 的全部内容, 来源链接: utcz.com/p/939060.html