利用 Python FastAPI 框架 实现 接收前端上传的文件 并 保存至本地服务器

项目需求:实现 批量导入 功能

 

需求拆分:

1.接收前端上传的excel文件

2.保存excel文件至本地服务器

3.将excel文件写入Mysql数据库

 

后端技术:Python FastAPI 框架

 

实验前提:

1.已经完成Linux虚拟机的虚拟环境的搭建

2.已经完成Pycharm远程连接Linux虚拟环境

3.已经完成FastAPI基础环境的搭建

 

功能实现:

(1).创建目录

# 创建目录,用于存放从前端获取的文件
[root@localhost rop_test]# mkdir -p test/file

(2).编写代码

from fastapi import FastAPI, File, UploadFile, Form

app = FastAPI()

@app.post("/files/")
async def create_file(file: bytes = File(...)):
    return {"file_size": len(file)}

@app.post("/uploadfile/")
async def create_upload_file(file: UploadFile = File(...)):
    return {"filename": file}


@app.post('/file/')
# 函数参数即为前端传递过来的文件/字符串
# 1.接收前端上传的文件
async def get_user(
        file: bytes = File(...),            # 把文件对象转为bytes类型,这种类型的文件无法保存
        fileb: UploadFile = File(...),      # UploadFile转为文件对象,可以保存文件到本地
        notes: str = Form(...)              # 获取普通键值对
):

    # 2.保存前端上传的文件至本地服务器
    # 2.1 读取前端上传到的fileb文件
    contents = await fileb.read()
    # print(contents)
    # print(fileb.filename)
    # 2.2 打开新文件
    # 第一个参数 文件存储路径+文件名称,存储路径目录需要提前创建好,如果没有指定,则默认会保存在本文件的同级目录下
    # 第二个参数 wb,表示以二进制格式打开文件,用于只写
    with open("test/file/" + fileb.filename, "wb") as f:
        # 2.3 将获取的fileb文件内容,写入到新文件中
        f.write(contents)

    # 启动服务后,会在本地FastAPI服务器的static/file/目录下生成 前端上传的文件

    return ( {
        'file_size': len(file),
        'file_name': fileb.filename,
        'notes': notes,
        'file_content_type': fileb.content_type
    })

备注:将excel文件写入Mysql数据库 实现方式 在之前的 博客中已经记录过了,就不再赘述了。

(3).启动服务

(rop_test) [root@localhost rop_test]# uvicorn 上传文件-简单案例:app --host '192.168.56.20' --port 8080 --reload

(4).测试

在网页中输入 192.168.56.20/docs 

[root@localhost rop_test]# ll test/file/budget.xlsx 
-rw-r--r--. 1 root root 13619 Mar 17 14:25 test/file/budget.xlsx
# 下载文件到桌面上
[root@localhost rop_test]# sz test/file/budget.xlsx

打开桌面上的文件,核对与上传文件是否一致。

注意点:

1.无论是从前端页面上传文件,还是 使用postman 或者 fastapi交互式文档  上传文件,测试效果都是一样的,所以不需要非得搞个前端上传文件的页面来测试。
2.接收前端传递过来的文件,其实没有那么复杂,直接写在定义接口的函数参数中即可,注意指明参数的类型为文件即可。(直接参考官网)

 

项目总结:

1.项目所需知识

1.1 Python FastAPI 框架  请求文件

官网地址:https://fastapi.tiangolo.com/tutorial/request-files/

1.2 Python 文件读写操作

文章链接:https://blog.csdn.net/lilygg/article/details/114922527

1.3 将excel文件写入Mysql数据库

文章链接:https://blog.csdn.net/lilygg/article/details/113882512

2.项目思维

任何一个项目需求,都可以拆分为多个小的需求功能点。要学会将复杂的事情分步骤简单化!

遇到不会的东西,不是一开始就没思想的去百度,先搞清楚要实现该功能所需要的技能,学会这些必备技能,再开始正式开发!

 

  • 12
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值