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

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

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

最近构思实现了一个小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关闭防火墙在哪里)

回答:1.首先第一步就是在win10电脑桌面上打开开始图标,然后点击设置图标,2.进入windows设置,直接搜索控制面板。3.在进入控制面板后,找到系统和安全,点击进入系统和安全。4.找到防...

主板驱动有必要安装吗(主板驱动重要吗)

主板驱动需要安装,因为主板对于一个电脑来说就是一个指挥活动系统,在主板上集成有CPU,内存声卡网卡。显卡。如果没有驱动这些设备就无办法按照你的指令进行工作。所以必须安装驱动才可以指挥他们进行工作一般情...

win7纯净版激活工具(win7纯净版产品密钥)

Win7激活工具有很多,比如kms激活工具、小马激活工具、Windowsloader等。下面以这三款激活工具为例,做一个简单的比较。1、kms激活工具,相对比较稳定,通用性强,对各种gho、iso镜...

网吧无盘系统下载(网吧无盘系统安装教程)

无盘服务器系统安装需要先准备好一台空白的服务器,然后安装相应的无盘系统软件,如基于网络启动的PXE、iSCSI等,再通过网络进行系统安装。在安装过程中需要注意网络设置、系统驱动等问题,并进行相应的配置...

4060t多少钱(4060s价格)

4060显卡2.1t算力?RTX4060Ti(8G版本)大概和3080显卡五五开,或者比他强百分之5左右的性能4、RTX4060(12G版本)大概比3080显卡要弱百分之15到20左右的性能。5、RT...

联想笔记本电脑启动u盘怎么设置

联想电脑设置U盘启动两种方法方法一:通过启动快捷键1、如果是UEFI启动盘,可以通过启动快捷键选择U盘启动,首先插入UEFIU盘启动盘,然后启动过程中按下F12或Fn+F12组合键。2、这时候会弹出...

免费100个验证码(手机验证码)

以接收语音验证平台买的平台就说,我们在使用嗯,或者是验证某一个软件的话,就会出现一个验证码,他就有一个接收的平台,他接受的平台就说是它是24小时服务的,就说你什么时候发验证码,能收到回复,这样的话,他...

cf黑边如何解决win10(cf win10黑边)

1、由于win10不兼容,所以要想全屏只能在进游戏前调整屏幕分辨率为1024*768。一、A卡:1、WIN+R输入regedit打开注册表,定位到HKEY_LOCAL_MACHINE------SY...

免费输入法下载(免费输入法下载安装)

原因:由于您在设置的“iTunesStore与AppStore密码设置”中选择了“始终需要”,所以导致每次下载应用时都需要输入AppleID的密码。解决方法:打开设置-iTunesStor...

怎么查看qq密码是多少(qq怎么查qq密码是多少)

qq密码是看不见的,你自己如果记不得了,可以找回密码。1.打开安装好的QQ软件,输入登录账号界面可以看到‘找回密码’四个字,然后点击找回密码2.点击之后,自动跳转到QQ安全中心中的密码管理,填写账号以...

zip下载(bandmusiczip下载)

首先我们为了下载解压软件,我们需要打开我们的手机,进入手机桌面,左右滑动屏幕,找到我们的应用商店,然后点击打开我们的应用商店。首先我们为了下载解压软件,我们需要打开我们的手机,进入手机桌面,左右滑动屏...

万能声卡驱动软件(万能声卡驱动软件下载)

1.好用2.因为万能声卡驱动可以兼容多种声卡型号,解决了一些声卡驱动不兼容的问题,而且安装和使用也比较简单方便。3.如果你的电脑声卡驱动出现问题,可以尝试使用万能声卡驱动来解决,但是需要注意选择...

强制粘贴复制的快捷键是什么

在mac系统下快速解决复制粘贴失灵的方法就是强制执行重启剪贴板(Clipboard),具体方法如下:打开ActivityMonitor,在spotlight搜索ActivityMonitor...

win10以太网没有ip配置(win10以太网没有有效的ip地址 怎么修复)
win10以太网没有ip配置(win10以太网没有有效的ip地址 怎么修复)

如果出现没有有效IP配置,那么说明你的电脑没有从路由器获取到IP地址,那么你要检查一下你自己的路由器有没有问题,最简单的方式是用手机直接连接路由器的WIFI看一下能不能上网,如果可以的话,那么就是电脑的问题,这个时候你需要下载一个360的断...

2026-01-23 10:55 liuian

office2010安装包免费(microsoft office word2010安装包)
  • office2010安装包免费(microsoft office word2010安装包)
  • office2010安装包免费(microsoft office word2010安装包)
  • office2010安装包免费(microsoft office word2010安装包)
  • office2010安装包免费(microsoft office word2010安装包)