百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

fastapi+vue3文件上传(vue formdata上传文件)

liuian 2025-04-06 18:08 98 浏览

最近构思实现了一个小demo网站,前端上传文件,后端分析文件,最后前端展示,整个过程还是蛮有意思的,刚刚开始学习网站开发,还有很多不会的地方,这里演示fastapi+vue3文件上传,上传的excel文件直接存入mongo中,读也是从mongo中读。

后台代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2024/1/19 09:20
# @Author  : ailx10
# @File    : main.py

# main.py
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
import pandas as pd
from pymongo import MongoClient
import io
from fastapi import File, UploadFile
from fastapi.responses import JSONResponse

app = FastAPI()

# CORS 设置,允许所有来源访问,生产环境时应根据需要进行调整
origins = ["*"]
app.add_middleware(
    CORSMiddleware,
    allow_origins=origins,
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)


client = MongoClient("mongodb://admin:passwd@localhost:27017/")
db = client.alarm_analysis
collection = db.raw_sample


@app.get("/get_samples/{page}")
async def get_samples(page: int):
    skip = (page - 1) * 10
    samples = collection.find().skip(skip).limit(10)

    # 转换 ObjectId 为字符串
    samples = [{**sample, "_id": str(sample["_id"])} for sample in samples]

    total_samples = collection.count_documents({})  # 获取总样本数

    return JSONResponse(content={"data": samples, "total": total_samples})


@app.post("/upload_excel")
async def upload_excel(file: UploadFile = File(...)):
    contents = await file.read()
    df = pd.read_excel(io.BytesIO(contents))

    samples = df.to_dict(orient="records")
    result = collection.insert_many(samples)

    return {"inserted_ids": [str(id) for id in result.inserted_ids]}

前端代码:

// HelloWorld.vue



<script>
import axios from 'axios';

export default {
  data() {
    return {
      samples: [],
      page: 1,
      totalPage: 1,
    };
  },
  mounted() {
    this.loadSamples();
  },
  computed: {
    filteredKeys() {
      // 获取样本的键,排除 _id 和 sheet
      return Object.keys(this.samples[0] || {}).filter(key => key !== '_id' && key !== 'sheet');
    },
  },
  methods: {
    async uploadExcel(event) {
      const file = event.target.files[0];
      const formData = new FormData();
      formData.append('file', file);

      // 使用代理配置的URL
      await axios.post('/api/upload_excel', formData);

      // 重新加载样本数据
      this.page = 1;
      this.samples = [];
      this.loadSamples();
    },
    async loadSamples() {
      const response = await axios.get(`/api/get_samples/${this.page}`);
      this.samples = response.data.data;

      // 计算总页数,假设每页显示10行
      this.totalPage = Math.ceil(response.data.total / 10);
    },
    validatePage() {
      // 确保输入页码在有效范围内
      if (this.page < 1 this.page='1;' else if this.page> this.totalPage) {
        this.page = this.totalPage;
      }
    },
    prevPage() {
      if (this.page > 1) {
        this.page -= 1;
        this.loadSamples();
      }
    },
    nextPage() {
      if (this.page < this.totalPage) {
        this.page += 1;
        this.loadSamples();
      }
    },
  },
};
</script>

代理配置:

// vue.config.js

const { defineConfig } = require('@vue/cli-service')

module.exports = defineConfig({
  transpileDependencies: true,
  devServer: {
    open:true,        
    host:'localhost',        
    port:8080,        
    https:false,       
    proxy: {
      '/api': {
        target: 'http://localhost:8000',
        changeOrigin: true,
        pathRewrite: {
          '^/api': '/'
        }
      }
    }
  }
})

相关推荐

手机截屏在哪里找(手机截屏在哪里找!pi111d rwmw)
手机截屏在哪里找(手机截屏在哪里找!pi111d rwmw)

一句话可以告诉楼主,手机屏幕往下划,一般都会有截屏按钮,或者在系统应用里也有截屏软件,如果都没有截屏的话,推荐楼主在应用商店下载一个截屏软件,希望以上回答能帮助到楼主。我的360手机三指向下划就可以截屏,很多手机都支持,可以试试。看说明书,...

2026-01-17 17:21 liuian

ps网页版(手机截图ps无痕改字)

对于低配置电脑,推荐使用PhotoshopCS5、PhotoshopCC2015.5和Photoshop2020这三个版本。PhotoshopCS5:功能相对完整,配置要求低。Photosh...

win7没有pdf虚拟打印机驱动(win7自带pdf虚拟打印机)

1、手动在控制面板添加打印机,选择“添加本地打印机”,(如果是非win7系统的话,还要点上并取消“自动检测并安装即插即用打印机”选择),端口选择“AdobePDF”,如果没有这个端口,则选择创建新端...

win732位系统哪个版本最流畅

如果是老电脑装32位更流畅,32位对内存的需求不高,只要有4G就可以正常使用。毕竟旧电脑的硬件配置不怎样,32位相对于64位来说,对硬件配置没有64位要求这么严格,不论在CPU还是内存上来说。如果是新...

下列说法正确的是电子商务(以下关于电子商务的说法说法错误的是)

电子商务通常是指在全球各地广泛的商业贸易活动中,在因特网开放的网络环境下,基于客户端/服务端应用方式,买卖双方不谋面地进行各种商贸活动,实现消费者的网上购物、商户之间的网上交易和在线电子支付以及各种商...

笔记本怎么调整亮度(笔记本如何调整亮度)
  • 笔记本怎么调整亮度(笔记本如何调整亮度)
  • 笔记本怎么调整亮度(笔记本如何调整亮度)
  • 笔记本怎么调整亮度(笔记本如何调整亮度)
  • 笔记本怎么调整亮度(笔记本如何调整亮度)
coreldrawx4序列号是多少(coreldraw x4序列号全是数字跟英文吗)

要将CDR文件保存为X4版本,请打开CDR文件,然后执行以下步骤:选择"文件"菜单点击"另存为"选择"CDR格式"作为保存类型选...

mac系统安装步骤(苹果装mac系统怎么安装)
mac系统安装步骤(苹果装mac系统怎么安装)

Mac装Windows目前有两种主流的方式:1、通过双系统。2、通过虚拟机。双系统:双系统优点是系统安装在底层,所以前提你的苹果笔记本必须为Intel架构(现在基本都是),这样全部硬件都可以被底层调用。但缺点也恰恰是因为这一点,苹果笔记...

2026-01-17 15:37 liuian

网页认证wifi入口(wlan网页认证)

连接后点击浏览填写手机号就可以进入了。柠檬WiFi网页认证登录入口是指柠檬WiFi的登录页面,用户需要在打开浏览器后,在地址栏输入或点击打开指定的网页链接,进入柠檬WiFi的认证登录界面。该认证登录入...

无线鼠标有电但是动不了(无线鼠标排行榜)

电脑无线鼠标不动了,解决方法:1、确认鼠标上的开关是否打开。如果没打开,请打开开关按钮。2、确认鼠标里的电池是否有电。如果电池没电,请更换新的电池。3、确认接收器是否连接好,如果已接好,尝试请更换另一...

使用u盘安装win7操作系统的步骤

首先,需要准备一个容量不小于4GB的U盘,并下载正版的Windows7系统镜像文件。接着,使用专业的U盘制作工具将系统镜像文件写入U盘中,并将U盘插入需要安装系统的电脑中。在开机时按下电脑的启动键,...

win10无限重启进入了桌面(window10无限重启进不去)
  • win10无限重启进入了桌面(window10无限重启进不去)
  • win10无限重启进入了桌面(window10无限重启进不去)
  • win10无限重启进入了桌面(window10无限重启进不去)
  • win10无限重启进入了桌面(window10无限重启进不去)
电脑无法格式化怎么办
电脑无法格式化怎么办

sd卡无法完成格式化,可以用取消快速格式化的方法,解决无法格式化的问题。具体步骤为:1、首先将内存卡插入电脑,然后鼠标双击此电脑,进入页面?2、右键单击内存卡盘符,选择格式化,弹出窗口?3、点击还原设备的默认值,取消快速格式化前面的勾,选择...

2026-01-17 14:21 liuian

win1032位好还是62位好(win1032位和62位哪个好)

如果内存容量不超过4G(含4G),建议安装32位Win10系统,如果硬件配置高(内存(大于4G)、显卡、硬盘和CPU都是时下主流配置),且有特殊需要,就安装64位Win10系统。如果电脑配置条件可以安...

驱动精灵离线版安装包下载(驱动精灵离线版官网)
驱动精灵离线版安装包下载(驱动精灵离线版官网)

能够离线安装,驱动精灵支持下载并保存网卡驱动程序,用户可以将其保存到U盘或其他存储设备中,离线安装时可以将其导入到计算机中安装。使用驱动精灵在没有网络的情况下安装驱动,需要安装驱动精灵万能网卡版。安装驱动精灵万能网卡版步骤如下所示:1、点击...

2026-01-17 13:55 liuian