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

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

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

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

相关推荐

win10强制删除流氓软件(win10强制删除流氓文件)

Win10删除流氓软件步骤 1、在桌面找看能不能找到软件的快捷方式如果不能就打开开始菜单中选中要卸载的程序右键点点击属性。 2、弹出对话框,点击打开文件位置就是查找目标。 3、系统会自动找到安装软件的...

迅雷加速器官网(迅雷加速器官网入口)

以下是使用迅雷视频加速器(VIP会员版)的步骤:1.下载并安装迅雷软件,然后登录VIP会员账号。2.打开迅雷软件,选择“工具”-“视频加速器”。3.在弹出的窗口中,找到您要加速的视频文件,将其拖...

爱奇艺老旧版本大全(爱奇艺老版本2017)

播放过程中点右下角设置,就是一个方向盘一样的东西,播放器选择FLASH,解决了。告诉你,那是因为你的爱奇艺会员不仅在你的电脑登录过,还在你的手机也登录过,对不对,我就是,明明就是我一个用,我手机登,电...

win7升级win10工具下载(win7 升级win10工具)

安装win7系统,然后JiHuo,然后用win10镜像进行升级;在win10系统下,如果没有网卡驱动的话,先使用网卡版驱动精灵安装网卡驱动,再使用系统更新更新系统,一般就能解决;如果不能解决...

电脑驱动用什么软件好(电脑驱动app哪个好)

如果是我windows系统,有如下软件可自动匹配和安装驱动:1.驱动精灵http://www.drivergenius.com驱动之家网站十年专业数据积累,驱动支持度达到98%,是最常用的软件2、驱动...

internet选项打不开(internet选项打不开解决方法)

答edge浏览器打不开的设置方法:1、首先打开IE浏览器后,自动跳转到了Edge浏览器。2、下面来阻止它的跳转。打开Edge浏览器,点击右上角的三个圆点,选择“设置”。3、在左边菜单中选择“默认浏览器...

百度网盘下载速度慢(百度网盘下载速度慢为啥)
  • 百度网盘下载速度慢(百度网盘下载速度慢为啥)
  • 百度网盘下载速度慢(百度网盘下载速度慢为啥)
  • 百度网盘下载速度慢(百度网盘下载速度慢为啥)
  • 百度网盘下载速度慢(百度网盘下载速度慢为啥)
mac地址修改有什么影响吗(mac地址更改后会有痕迹吗)

MAC就是个编号,不会引发你所担心的问题。瞎改没什么坏处,但是跟网内的MAC冲突就会出现问题,但是你随便改一个冲突的概率微乎其微,快赶上彗星撞地球了。当然,有时候需要刻意去修改MAC,比如有的运营商为...

电脑dns怎么设置网速快(电脑如何设置dns让网速变快)

要设置DNS来提高网速。DNS(DomainNameSystem)是将域名转换为IP地址的系统,它可以帮助我们在浏览器中输入域名时快速找到对应的服务器。通过设置合适的DNS服务器,可以加快域名解析...

手机清理软件哪个最好用(什么手机清理软件免费又好用)

1、腾讯手机管家腾讯手机管家是腾讯旗下的一款手机安全软件,该软件可以对我们的手机进行安全保护和相关的手机优化和清理。功能包括病毒查杀、骚扰拦截、软件权限管理、手机防盗及安全防护,用户流量监控、空间清理...

autocad序列号和激活码(autocad序列号和密钥2022)

CAD2022序列号:666-69696969,667-98989898.400-45454545,066-66666666。cad2022产品密钥:001M1、001n1激活密钥步骤:1.双击运行软...

window7下载不了itunes(win7装不了itunes)

原因①安装了额外的硬件驱动或软件。②对系统的驱动及服务进行了错误的配置。③显示配置错误。解决方法①Safemode:只加载基本的服务和驱动。②Lastknowngood:启动上一次的成功配置。③...

电脑如何查看隐藏文件夹(如何看电脑隐藏的文件夹)
电脑如何查看隐藏文件夹(如何看电脑隐藏的文件夹)

1.打开电脑,单击鼠标右键,出现菜单后,点击个性化2.进入个性化页面后,点击左侧的控制面板主页3.进入控制面板主页,点击文件夹选项4.进入文件夹选项,点击查看-隐藏文件和文件夹,点击显示隐藏的文件,文件夹和驱动器,点击应用-确定,就可以...

2026-01-19 19:37 liuian

如何用光驱安装win7系统(怎么用光驱安装win7系统)
  • 如何用光驱安装win7系统(怎么用光驱安装win7系统)
  • 如何用光驱安装win7系统(怎么用光驱安装win7系统)
  • 如何用光驱安装win7系统(怎么用光驱安装win7系统)
  • 如何用光驱安装win7系统(怎么用光驱安装win7系统)
开机后机械硬盘不见了只有固态

固态硬盘上的C分区必须要激活成主分区并在其上安装操作系统,若你的机械硬盘以前一直是用来安装操作系统使用的,那么原先机械硬盘上的C分区应该是激活成主分区了的,现在有了固态硬盘作系统盘,就要把机械硬盘上的...