• 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}"}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    启动测试:

    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

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

    image-20221202201612229

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

    image-20221202201823850

  • 相关阅读:
    IDEA启动时报Failed to create JVM错误的解决
    Redis的安装
    常见面向对象的设计原则
    HCIA -- 动态路由协议之RIP
    通过Redis实现一个异步请求-响应程序
    htmlparser2.js:一个快速宽松的HTML/XML解析器
    【路径规划-TSP问题】基于遗传算法求解多起点多TSP问题附matlab代码
    计算机视觉系列-YOLOX 在 MMDetection 中复现全流程解析(五)
    python selenium 爬虫教程
    netstat命令应用和ifconfig命令应用
  • 原文地址:https://blog.csdn.net/u010839779/article/details/128154028