Python FastAPI返回文件
在Web开发过程中,有时候我们需要返回文件给客户端,比如下载一个PDF、图片或者其他类型的文件。Python的FastAPI框架提供了方便的方法来实现这个功能。本文将详细介绍如何在FastAPI中返回文件。
1. 返回静态文件
在FastAPI中,我们可以使用FileResponse
来返回静态文件,示例代码如下:
from fastapi import FastAPI
from fastapi.responses import FileResponse
app = FastAPI()
@app.get("/download")
async def download_file():
return FileResponse("test.pdf")
运行上述代码后,访问http://localhost:8000/download
即可下载test.pdf
文件。
2. 返回动态文件
有时候我们需要根据请求参数生成文件并返回给客户端。FastAPI提供了StreamingResponse
来实现这个功能,示例代码如下:
import io
from fastapi import FastAPI
from fastapi.responses import StreamingResponse
app = FastAPI()
@app.get("/generate/{filename}")
async def generate_file(filename: str):
# 生成文件内容
content = f"Hello from deepinout.com! This is {filename}"
# 将内容写入内存文件
file_like = io.BytesIO(content.encode())
return StreamingResponse(file_like, media_type="text/plain")
运行上述代码后,访问http://localhost:8000/generate/test.txt
即可下载包含”Hello from deepinout.com! This is test.txt”内容的文件。
3. 设置文件的MIME类型
有时候我们需要设置返回文件的MIME类型,可以通过media_type
参数实现。示例代码如下:
import io
from fastapi import FastAPI
from fastapi.responses import StreamingResponse
app = FastAPI()
@app.get("/image")
async def generate_image():
# 生成图片内容
content = open("image.png", "rb").read()
# 将内容写入内存文件
file_like = io.BytesIO(content)
return StreamingResponse(file_like, media_type="image/png")
运行上述代码后,访问http://localhost:8000/image
即可下载image.png
文件,同时浏览器会将其显示为图片。
总结
通过上述示例代码,我们学习了在FastAPI中返回文件的方法。通过FileResponse
和StreamingResponse
,我们可以方便地返回静态文件和动态生成的文件,并可以设置文件的MIME类型。在实际开发中,我们可以根据需求选择合适的方法来返回文件,以提升用户体验。