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

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

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

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

相关推荐

版本下载(问道手游雷霆官方版本下载)

点击最新版本即可更新。1、可以通过下载一些应用助手类app,在这类软件里搜索想要下载的软件,点进详情后下滑,找到历史版本后就可以选择自己想要的版本了。2、可以直接通过浏览器或者一些网站进行搜索,这个方...

macbook air装win10(macbook air装win10后经常蓝屏)

要在MacBookAir上安装Windows10,可以按照以下步骤进行:下载Windows10ISO文件,并将其保存在MacBookAir的硬盘上。下载和安装BootCamp助理,该软件可...

xp电脑重装系统教程(xp电脑重装系统怎么操作)
xp电脑重装系统教程(xp电脑重装系统怎么操作)

既然悄问电脑怎么重装系统,咱就说的简单点一吧。分这么几步:1、准备个U盘,最少也要8G吧。2、下载个PE制作工具,现在网上到处都是,给你推荐一个吧。安装好后,插上U盘点按要求,下一步操作就可以,很简单的。3、在网上下载个系统。因为你对电脑了...

2026-01-20 23:05 liuian

海外应用商店下载

 一、打开手机,在手机桌面上找到“设置”一项,点击进入。 二、进入设置后,找到自己的ID一栏,点击进入。 三、进入AppleID后,找到“iTunesStore与Ap...

注册邮箱126(注册邮箱126免费注册申请)

01在浏览器内输入“126”:02进入126邮箱,选择右下角的立即注册:03注册邮箱账号时会出现三个选项:注册字母邮箱、注册手机号邮箱、注册vip邮箱。选择一个你喜欢的字母邮箱、手机号邮箱ORvi...

win7怎么连接win10的打印机(win7怎么连接win10打印机共享)
win7怎么连接win10的打印机(win7怎么连接win10打印机共享)

操作方法:1、在win7系统下打开电脑的控制面板,点击“家庭组”——“创建家庭组”,在“与其它家庭成员共享”页面将“打印机和设备”设为“已共享”,创建完成,记住电脑给出的密码。2、在win10系统下打开电脑的控制面板,找到“家庭组”,搜索家...

2026-01-20 22:21 liuian

h3c路由器登录网址(h3c路由器登录入口)

H3C路由器登录方法:第一步:拿到新路由器后,我们看一下路由器的背面,这上面有登录的地址、默认用户名、密码。找到后,我们记住这个上面的用户名和密码。第二步:打开IE浏览器,在地址栏内输入:192.1...

机械硬盘2048还是4096(机械硬盘2048 还是4096)

1、是40962、Diskgen硬盘分区工具给SSD分区时,默认的4K对齐都是选4096。固态硬盘4K对齐选2048还是4098,性能区别并不大,而测试来看,128GB的固态硬盘,在Win10系统下,...

联想y系列电脑(联想y系列电脑有哪些)

型号太多了,按内核分为老Willamette的P4A、Northwood的P4B、Northwood改进型的P4C、Prescott的P4E。每种内核又根据频率不同分为很多具体型号。另外还有P4的双核...

dell新版bios找不到u盘启动(戴尔新版bios找不到u盘启动项)

1.BIOS禁用了USB设备。(进入BIOS,将“EnableUSBDevice”修改为“Enable”)2.USB接口的问题。(可以考虑换其他的USB接口尝试一下。)3.主板和系统的兼容性问题。...

windows10怎样进入安全模式(windows10 如何进入安全模式)

在Windows10中,有几种方法可以进入安全模式:方法1:使用开始菜单1.点击“开始”按钮,并选择“设置”图标(齿轮状的图标)。2.在“设置”窗口中,选择“更新和安全”。3.在左侧面板中,选...

家庭版有必要升级专业版吗(家庭版升级专业版要重装吗)

家庭版是无法通过更换密钥升级到专业版的。专业版密钥只能用于激活验证专业版,同理家庭版也只能验证激活家庭版。你将专业版的密钥用于家庭版就会提示:“此密钥不适用于该windows版本”所以,不能通过简单的...

太平洋电脑网官网模拟组装(太平洋电脑在线组装模拟)

网购别找价格最低的,往往上当。找到那些价格靠谱的,比本地买还可靠些。中关村在线的模拟装机很不错的。当然太平洋的也很好。这是两家最好的DIY论坛。郑州太平洋钓箱是一种常见的钓鱼装备,下面是大致的组装步骤...

qq下载2025最新版(下下载qq最新版)

您好个人QQ是不会停运的。12月26日,腾讯官方发布公告称,腾讯企业QQ和腾讯营销QQ将在2022年1月31日23点59分59秒关停,届时将不再提供服务。此前2021年10月18日,企业QQ和营销QQ...

电脑删除文件怎么删的干净(电脑删除文件的方法有哪些)

1、首先,在电脑桌面的空白处右键单击一下,再依次点击新建——文本文档。2、然后,点击新建的文本文档,再按F2。3、接着,在文本文档的名称编辑处把txt格式改成bat。4、之后,在弹出的重命名的提示框中...