fastapi.responses 返回MP3文件
时间: 2024-11-09 22:09:40 浏览: 7
PyPI 官网下载 | fastapi-responses-0.2.0.tar.gz
在FastAPI中,返回MP3文件通常涉及到创建一个响应实例,该实例包含指定的内容类型和实际的音频数据。你可以使用`FileResponse`或`StreamingResponse`来实现这个功能。这里是一个基本的例子:
```python
from fastapi import FastAPI, File, Response
import io
app = FastAPI()
# 假设我们有一个MP3文件对象,比如来自数据库或硬盘
mp3_file = open("path_to_your_mp3_file.mp3", "rb")
# 使用FileResponse创建一个响应,设置Content-Disposition头信息以提供下载提示
async def mp3_download_response(file: bytes):
response = Response(
content=file,
media_type="audio/mpeg",
headers={
"Content-Disposition": f"attachment; filename={os.path.basename(mp3_file.name)}"
}
)
return response
@app.get("/download-mp3")
async def download_mp3():
return mp3_download_response(mp3_file.read())
```
在这个例子中,当用户访问`/download-mp3`,他们将会下载名为`file.mp3`的MP3文件。`media_type`属性设置了HTTP响应的MIME类型,告诉浏览器这是一个音频文件。
注意,如果你的文件非常大,最好使用`StreamingResponse`,因为它不会一次性加载整个文件到内存,而是按块传输:
```python
from fastapi import StreamingResponse
async def streaming_mp3(file: BinaryIO):
async def stream_generator():
while True:
data = file.read(8192)
if not data:
break
yield data
return StreamingResponse(stream_generator(), media_type="audio/mpeg")
```
这允许你处理非常大的MP3文件而不会消耗过多内存。
阅读全文