【FastAPI】文件响应方法StreamingResponse和 FileResponse的用法和场景

在 FastAPI 中,StreamingResponseFileResponse 是用于处理文件响应的两种常见方法。它们在不同的场景中有各自的用途。下面详细介绍这两者的用法和适用场景。

1. FileResponse

FileResponse 是用来发送现有文件作为响应的。它适用于发送静态文件,如图片、PDF 文档、音频、视频等。FileResponse 会直接读取指定路径的文件,并将其作为 HTTP 响应返回给客户端。

用法:
from fastapi import FastAPI
from fastapi.responses import FileResponse

app = FastAPI()

@app.get("/download-file")
def download_file():
    file_path = "path/to/your/file.txt"
    return FileResponse(file_path, media_type="application/octet-stream", filename="downloaded_file.txt")
适用场景:
  • 下载现有的静态文件,如文档、图片、视频等。
  • 不需要对文件进行逐步处理或生成,文件已经存在于服务器的文件系统中。

2. StreamingResponse

StreamingResponse 适用于当文件内容是动态生成的或需要逐步读取数据进行响应的场景。它通过“流式”将数据逐步发送给客户端,而不是一次性加载整个文件到内存中。这对于处理大文件或实时生成数据的场景非常有用。

用法:
from fastapi import FastAPI
from fastapi.responses import StreamingResponse

some_file_path = "large-video-file.mp4"
app = FastAPI()


@app.get("/")
def main():
    def iterfile():  # (1)
        with open(some_file_path, mode="rb") as file_like:  # (2)
            yield from file_like  # (3)

    return StreamingResponse(iterfile(), media_type="video/mp4")
适用场景:
  • 需要动态生成或逐步加载数据,例如大文件、日志、实时数据等。
  • 避免一次性将整个文件加载到内存中,以节省内存资源。
  • 实现一些实时数据推送的场景,如视频流、日志流等。

总结

  • FileResponse 适合返回已经存在的文件,通常是用于文件下载或返回静态资源。
  • StreamingResponse 则更适合返回动态生成或需要逐步传输的大型文件,或用于推送实时数据流。

这两者根据文件的大小、是否动态生成以及性能需求来选择使用。

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

写bug如流水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值