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

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

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

最近构思实现了一个小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': '/'
        }
      }
    }
  }
})

相关推荐

文件删除后可以恢复吗(删除掉的文件还能不能恢复)

一、如果是刚刚执行的删除操作,按下“Ctrl+Z”撤销上一步即可恢复刚刚删除的文件。?二、如果是之前删除的文件,可以借助数据恢复软件来进行恢复。首先打开嗨格式数据恢复大师,...

4g设置多少虚拟内存(4g虚拟内存多大合适)

4G-10G。建议虚拟内存最小为物理内存的1到1.5倍。虚拟内存最大为物理内存的2到2.5倍。1、虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空...

电脑用win7好还是win10(目前win7好用还是win10)

win7运行速度快,效率高,但win10是趋势总体来说,Windows7和Windows10都有各自的优点和缺点,哪个更好用主要取决于个人喜好和电脑配置。Windows7的优点包括稳定性较好、兼...

云净u盘启动盘制作教程(云净一键装机u盘装系统教程)

方法/步骤分步阅读1/71.运行程序下载运行程序,选择“制作系统”,插上U盘点击“开始制作”,选择需要安装的系统。2/72.制作框架点击“开始制作”,点击“确定”,开始制作U盘,制作完成后点击“取消”...

win7原版和ghost区别(ghost win7与 原版win7)

原版就是微软的官方安装文件,系统纯净,不带任何软件,安装完成后桌面只有一个我的电脑。镜像版就是在原版系统的基础上,会带有部分系统驱动、word或者其他软件及系统补丁等,等于说用镜像版装完系统后自带一些...

台式电脑硬盘在哪个位置(台式电脑硬盘位置图)

  硬盘是电脑中比较重要的一个部件,下面就为大家介绍一下电脑硬盘在哪个位置。电脑硬盘在哪个位置  1、台式机的ATX机箱的硬盘位置都在光驱位置的正下方,会有硬盘的安装轨道和固定孔;  2、有的台式机箱...

win7进系统后黑屏只有鼠标(win7进系统后黑屏只有鼠标指针)
win7进系统后黑屏只有鼠标(win7进系统后黑屏只有鼠标指针)

如果不会设置电脑:1、可以按住电脑关机键,把电脑强制关机,然后再次开机可能就没有问题了;2、或者在电脑黑屏后,按一下关机键,这时电脑会进入休眠状态,然后再次按键盘任意键、或者点击鼠标电脑就会重新启动,然后电脑可能就会恢复正常。注:这两种方法...

2026-01-17 08:55 liuian

win10突然没有蓝牙开关(win10系统怎么没有蓝牙开关了)

出现win10没有打开蓝牙按钮可能是因为该设备没有蓝牙等1、更新蓝牙驱动或者重新安装蓝牙驱动。右键点击此电脑,点击管理,进入设备管理器,找到蓝牙驱动进行驱动更新。2、启动蓝牙服务。按win+r打开运行...

在电脑上怎样下载office2013

安装Office2013的步骤如下:1、下载Office2013安装包并解压全部文件(如果是ISO格式,也使用压缩软件打开并解压)。2、双击运行解压文件里的“Setup.exe”文件,首先是使用许可协...

移动随身wifi怎么用(移动随身wifi如何使用)
移动随身wifi怎么用(移动随身wifi如何使用)

以手机连接移动随身wifi为例进行说明,具体操作步骤如下:1、首先打开手机,点击【设置】。2、点击设置列表里边的【无线局域网】。3、然后点击无线局域网右边的【按钮】开启。4、接着点击要连接的【Wi-Fi名称】。5、最后输入Wi-Fi【密码】...

2026-01-17 08:05 liuian

windows7怎么关机(windows7怎样关机)
  • windows7怎么关机(windows7怎样关机)
  • windows7怎么关机(windows7怎样关机)
  • windows7怎么关机(windows7怎样关机)
  • windows7怎么关机(windows7怎样关机)
怎么不让别人连我家wifi(用手机怎么踢出wifi蹭网)

这个容易,把你家的wifi密码修改一下,尽量把密码改的复杂一些,数字加字母加其他符号,十位以上,并且不要在万能钥匙里分享出去,别人就无法连接你家的wifi了。点开路由器进入路由器,路由器后面ip地址...

windows loader激活(windows loader激活工具install点不了)

激活工具的版本太低,或者激活工具的版本与所要激活的系统版本不同导致的。可以尝试如下激活方式:一、找到购系统软件的激活密钥,继续在激活窗口输入你所购买产品的密钥即可激活。二、从微软官方或者其他渠道购买系...

笔记本wifi(笔记本wifi信号弱)
笔记本wifi(笔记本wifi信号弱)

点击任务栏右下角的网络图标,点击WLAN,点击一个WiFi,点击连接,输入正确的网络安全密钥,就可以连接WiFi了。...

2026-01-17 07:05 liuian

装系统要u盘吗(装系统需要启动盘吗)

电脑装系统需要一个u盘,但不一定是空U盘。第一我们装系统,就需要一个u盘,准备好u盘后,我们还得找一台可以使用的电脑,在再电脑上下载一个u盘启动项,做好启动项后,我们得在网上下载一个系统包,解压到我们...