FastAPI接受POST上传文件并保存本地,python

本文介绍了一个使用FastAPI框架实现的简单文件上传服务。该服务通过POST请求接收上传的文件,并将其保存到本地指定目录中。文章提供了完整的Python代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FastAPI接受POST上传文件并保存本地,python

import os

import uvicorn
from fastapi import FastAPI, File, UploadFile

app = FastAPI()


@app.post("/file/upload")
async def upload(file: UploadFile = File(...)):
    fn = file.filename
    save_path = f'./file/'
    if not os.path.exists(save_path):
        os.mkdir(save_path)

    save_file = os.path.join(save_path, fn)

    f = open(save_file, 'wb')
    data = await file.read()
    f.write(data)
    f.close()

    return {"msg": f'{fn}上传成功', 'length': len(data)}


if __name__ == '__main__':
    uvicorn.run(app=app, host="0.0.0.0", debug=True)

FastAPI是一个轻量级的Web框架,用于构建Python web应用。如果你想让用户通过FastAPI接口上传Excel文件保存到指定位置,可以按照以下步骤操作: 1. 首先,安装必要的库: - 使用`fastapi` - `starlette.requests`处理文件上传 - `openpyxl`或`pandas`读取Excel内容(如果需要解析) - `pathlib`处理文件路径 ```bash pip install fastapi starlette requests openpyxl pandas ``` 2. 创建FastAPI应用,设置路由和处理器函数: ```python from fastapi import FastAPI, File, UploadFile import os from pathlib import Path app = FastAPI() UPLOAD_DIR = "uploads" # 你需要创建这个目录 ALLOWED_EXTENSIONS = {'xlsx', 'xls'} @app.post("/upload_excel/") async def upload_excel(file: UploadFile = File(...)): filename = file.filename if not allowed_file(filename): return {"error": f"只允许上传.xlsx或.xls文件"} # 保存文件到指定目录 file_path = os.path.join(UPLOAD_DIR, filename) with open(file_path, "wb") as buffer: buffer.write(file.file.read()) # 可能还需要处理Excel内容,这里仅保存文件 # 使用openpyxl: # workbook = await read_excel_from_buffer(file.file) # 或者使用pandas: # data = await load_excel_to_dataframe(file_path) return {"message": "文件上传", "file_path": file_path} def allowed_file(filename: str) -> bool: return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS # 可选的辅助函数,假设使用openpyxl async def read_excel_from_buffer(buffer: bytes): pass # 可选的辅助函数,假设使用pandas async def load_excel_to_dataframe(file_path: str): pass ``` 3. 运行你的FastAPI应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zhangphil

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

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

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

打赏作者

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

抵扣说明:

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

余额充值