python FastAPI 文件下载

FastAPI定义

FastAPI如字面意思就是快速API,我想快速提现在两方面,第一:访问API快速;第二:编写API快速。

官方定义:FastAPI是一个现代、快速(高性能)的web框架,在Python 3.7及以上,基于标准Python类型提示构建API。

FastAPI特点
  • 快速: 非常高的性能,与NodeJS和Go不相上下(感谢Starlette和Pydantic)。最快的Python框架之一

  • 快速编码: 将开发速度提高200%到300%。

  • 更少bug: 减少大约40%的人为(开发人员)错误。

  • 直观: 强大的编辑器支持。随时随地完成工作。较少的调试时间。

  • 简单: 设计为易于使用和学习。大量减少文档阅读。

  • 短: 尽量减少代码重复。每个参数声明的多个特性。更多减少错误。

  • 健壮: 获得可用于生产的代码。具有自动交互文档

  • 基于标准: 基于(并完全兼容)API的开放标准:OpenAPI(以前称为Swagger)和JSON Schema JSON Schema

FastAPI自带案例
from fastapi import FastAPI

app = FastAPI()

"""
1. 终端启动:
uvicorn 模块名:模块中的app名 -reload 默认是127.0.0.1:8000
例:uvicorn main:app --reload
2. 设置ip和端口:uvicorn 模块名:模块中的app名 -reload --host=ip地址 -port=端口号
例:uvicorn O1:app --reload --host=0.0.0.0 -port-8080
3. 在main函数中调用uvicor模块的.run()
uvicorn.run(app='FileDownload:app', host="127.0.0.1", port=8001, reload=False)
"""

@app.get("/")
async def root():
    return {"message": "Hello World"}


@app.get("/hello/{name}")
async def say_hello(name: str):
    return {"message": f"Hello {name}"}

启动测试:

image-20221202201040228

访问测试:

image-20221202201139613

image-20221202201234055

FastAPI下载文件案例
import uvicorn
from fastapi import FastAPI
from starlette.responses import FileResponse

"""
1. 终端启动:
uvicorn 模块名:模块中的app名 -reload 默认是127.0.0.1:8000
例:uvicorn FileDownload:app --reload
2. 设置ip和端口:uvicorn 模块名:模块中的app名 -reload --host=ip地址 -port=端口号
例:uvicorn FileDownload:app --reload --host=0.0.0.0 -port-8080
3. 在main函数中调用uvicor模块的.run()
uvicorn.run(app='FileDownload:app', host="127.0.0.1", port=8001, reload=False)
"""

app = FastAPI(name="FileDown")  #构造FastAPI实例

"""
使用动态参数传递方式,实现根据指定名称下载指定文件
"""
@app.get("/filedown/{fileName}")
async def download(fileName:str):
    # 处理完毕文件以后,生成了文件路径
    filename = f"/Users/liyadong/data/pythondata/{fileName}"
    return FileResponse(
        filename,  # 这里的文件名是你要发送的文件名
        filename=f"{fileName}",  # 这里的文件名是你要给用户展示的下载的文件名,比如我这里叫01.csv
    )

"""
主函数,用于启动api服务;也可以通过终端方式启动;
启动成功后在浏览器地址栏请求url为:http://127.0.0.1:8001/filedown/2015.csv
"""
if __name__ == "__main__":
    uvicorn.run(app='FileDownload:app', host="127.0.0.1", port=8001, reload=False)

启动测试:右键运行该模块即可。

image-20221202201612229

访问测试(前提是指定目录下有对应的文件才可以下载):

image-20221202201823850

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
文本格式不能很好显示,请见谅(附件里有比较齐整的excel表格统计) 大小类型 传输类型 api方法 文件大小 花费时间 速率byte/ms 速率mb/s 缓存数组 次数 备注 大文件 下载 download_file(group_name, remote_filename, localFile) 1073741824(约1G) 28343ms 37883 36.12804413 无 1 下载 download_file(group_name, remote_filename , downloadStream) 1073741824(约1G) 29195ms 36778 35.07423401 0 1 fastDFS的DownloadStream,FileOutputStream 下载 download_file(group_name, remote_filename , downloadStream) 1073741824(约1G) 24352ms 44092 42.04940796 2K 1 fastDFS的DowloadStream,BufferedOutputStream 下载 download_file(group_name, remote_filename , DownloadCallback) 1073741824(约1G) 24831ms 43241 41.23783112 2K 1 实现DownloadCallback,BufferedOutputStream 下载 download_file(group_name, remote_filename , DownloadCallback) 1073741824(约1G) 25922ms 41422 39.50309753 8K 1 实现DownloadCallback,BufferedOutputStream 普通文件 下载 download_file(group_name, remote_filename, localFile) 59113472(约56M) 382ms 154747 147.5782394 无 1 下载 download_file(group_name, remote_filename , downloadStream) 59113472(约57M) 369ms 160199 152.7776718 0 1 fastDFS的DownloadStream,FileOutputStream 下载 download_file(group_name, remote_filename , downloadStream) 59113472(约58M) 499ms 118702 113.2030487 2K 1 fastDFS的DowloadStream,BufferedOutputStream 下载 download_file(group_name, remote_filename , DownloadCallback) 59113472(约59M) 592ms 99853 95.22724152 2K 1 实现DownloadCallback,BufferedOutputStream 下载建议:100M内数据使用fastDFS提供的DownloadStream;大于1G的数据,使用BufferedOutputStream和DowloadStream
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大数据东哥(Aidon)

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

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

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

打赏作者

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

抵扣说明:

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

余额充值