基于FastAPI的文件上传和下载

基于FastAPI的文件上传和下载

一、前言

为了实现ASR的可视化界面,在各个博客中寻觅了一波找找文件上传和下载的例子,没有找到能完整实现这个功能的,有也只是有一部分(菜菜求捞捞),看了甚是烦恼,后来找gpt大爷来回交互了几下,把功能实现了。记录一下过程。

二、实现步骤

对了,能来查这个问题的兄弟,默认你对fastapi有了解了hh,就不多介绍了,单刀直入主题,怎么实现功能。

1、环境配置

这个功能实现涉及到三个库: fastapi、uvicorn、 requests。

pip install fastapi uvicorn requests -i

https://pypi.tuna.tsinghua.edu.cn/simple

2、服务端代码

文件名:upload.py

python 复制代码
import os.path

import uvicorn

from fastapi import FastAPI, File, UploadFile
from fastapi.responses import FileResponse

app = FastAPI()

@app.get("/")
async def hello():

    return {"ret": 'hello'}

@app.post("/uploadfile/")
async def create_upload_file(file: UploadFile = File(...)):
    print(file)
    if not os.path.exists('uploaded_files'):
        os.mkdir('uploaded_files')
    with open(f"uploaded_files/{file.filename}", "wb") as f:
        f.write(await file.read())
    return {"filename": file.filename}

@app.get("/downloadfile/{filename}")
async def download_file(filename: str):
    file_path = f"uploaded_files/{filename}"
    return FileResponse(file_path, media_type="application/octet-stream", filename=filename)


if __name__ == '__main__':
    uvicorn.run('upload:app', host='127.0.0.1', port=18005, reload=True)

运行结果参考:

3、客户端代码

python 复制代码
import os

import requests
def upfile(file_path):
    url = "http://127.0.0.1:18005/uploadfile/"

    try:
        with open(file_path, "rb") as f:
            files = {"file": (file_path, f)}
            response = requests.post(url, files=files)

        if response.status_code == 200:
            print(response.json())
            return True
        else:
            print(f"Request failed with status code {response.status_code}")
            return False
    except Exception as e:
        print(e)
        return False
def download(fileName):
    url = "http://127.0.0.1:18005/downloadfile/{}".format(fileName)
    try:
        res=requests.get(url)
        if res.status_code==200:
            with open(fileName,'wb') as w:
                w.write(res.content)

            return True
        else:

            return False
    except Exception as e:
        print(e)
        return False
def main():
    file_path = r"C:\Users\Admin\Pictures\LesNo2Text.png"

    upfile(file_path)
    fileName=os.path.basename(file_path)
    print('待下载的文件名字:'.format(fileName))
    ret=download(fileName)
    if ret:
        print('下载成功:' + fileName)
    else:
        print('下载失败:'+fileName)
if __name__=="__main__":
    main()

运行结果参考:
到这里就结束了,有遇到什么bug欢迎在下面评论区提,相对其他博主我还是学生相对活跃一些hh。

相关推荐
Katecat996637 小时前
YOLO11分割算法实现甲状腺超声病灶自动检测与定位_DWR方法应用
python
Evand J7 小时前
TDOA(到达时间差)的GDOP和CRLB计算的MATLAB例程,论文复现,附参考文献。GDOP:几何精度因子&CRLB:克拉美罗下界
开发语言·matlab·tdoa·crlb·gdop
野犬寒鸦7 小时前
从零起步学习并发编程 || 第七章:ThreadLocal深层解析及常见问题解决方案
java·服务器·开发语言·jvm·后端·学习
云姜.7 小时前
java抽象类和接口
java·开发语言
xyq20248 小时前
Pandas 安装指南
开发语言
xixixin_8 小时前
【JavaScript 】从 || 到??:JavaScript 空值处理的最佳实践升级
开发语言·javascript·ecmascript
玩大数据的龙威8 小时前
农经权二轮延包—各种地块示意图
python·arcgis
ZH15455891318 小时前
Flutter for OpenHarmony Python学习助手实战:数据库操作与管理的实现
python·学习·flutter
belldeep8 小时前
python:用 Flask 3 , mistune 2 和 mermaid.min.js 10.9 来实现 Markdown 中 mermaid 图表的渲染
javascript·python·flask
喵手8 小时前
Python爬虫实战:电商价格监控系统 - 从定时任务到历史趋势分析的完整实战(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·电商价格监控系统·从定时任务到历史趋势分析·采集结果sqlite存储