在 FastAPI 中,返回文件字节流的主要方式包括使用 StreamingResponseFileResponse。这两者都可以用于返回二进制数据,例如图像文件。

StreamingResponse: 适用于以流式方式发送数据,对于大型文件特别有用,因为它允许在数据生成时就开始发送,而不必等到整个数据集都可用。

1
2
3
4
5
6
7
8
9
10
11
import io
from fastapi.responses import StreamingResponse


@app.get("/get_demo_image")
def get_demo_image():
image_data = open("face.png", "rb").read()
return StreamingResponse(
content=io.BytesIO(image_data),
media_type="image/png"
)

FileResponse: 适用于返回文件,可以从文件系统路径中读取文件内容。

1
2
3
4
5
6
7
8
9
from fastapi.responses import FileResponse


@app.get("/get_demo_image")
def get_demo_image():
return FileResponse(
path="face.png",
media_type="image/png"
)

这两种方法都是有效的,并且具体的选择可能取决于你的应用程序的需求和性能考虑。