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

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

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

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

相关推荐

u盘坏了怎么简单的维修(u盘坏了 怎么修)

一般是可以修的:具体如下U盘损坏的问题可能是1,U盘接口虚焊,这样的话去修一下就好了,几块钱就搞定(插U盘无反应或者摇动U盘偶尔有反应)。2,你U盘的晶振坏了,这样的话换一个就好了,可以修的,也不贵(...

联想笔记本老款有哪些(联想笔记本老款有哪些系列)

这个是联想c116型号,都是能够让这个联想笔记本有二纳米的工艺,同时能够让它有12GB的运行内存和512GB的机械硬盘,运行起来还是很不错的。1992年10月5日,IBM正式发布三款ThinkPa...

怎么更新n卡驱动(怎么更新n卡驱动器)

若您使用的是NVIDIA显卡,以下是更新显卡驱动的一般步骤:1.打开"NVIDIA控制面板"。您可以通过右键点击桌面空白处,选择"NVIDIA控制面板"来打开。2....

电脑版ie浏览器下载win10(ie10浏览器怎么下载安装到电脑)

安装IE10浏览器需要满足以下要求:1.操作系统需要为Windows7及以上版本。2.已经卸载之前的IE版本(如IE9等)。3.计算机已经安装了SP1(ServicePack1)补丁。如果你的电...

系统管理权限在哪里(系统的权限管理)
  • 系统管理权限在哪里(系统的权限管理)
  • 系统管理权限在哪里(系统的权限管理)
  • 系统管理权限在哪里(系统的权限管理)
  • 系统管理权限在哪里(系统的权限管理)
微软office激活密钥2007(office激活密钥 2007)

您好!建议您可以下载一个激活工具,激活一下就可以了。祝您生活愉快,望采纳!一般不是在文件夹中,甚至干脆没有相应的密钥文件,有的则可能会有个诸如sn.txt这样的文件,里面存放着安装密钥。如果没有,那么...

下载安装百度输入法(百度输入法下载后如何安装)

要将默认输入法调为搜狗输入法,可以按照以下步骤进行操作1.打开电脑的“设置”界面;2.点击“时间和语言”选项;3.在“语言”选项卡中,找到“首选语言”一栏;4.点击“添加语言”按钮,选择“中文...

联想电脑售后电话号码(联想电脑厂家售后电话)

查询方法如下1、打开浏览器输入联想官网网址并转到https://www.lenovo.com.cn/2、点击“服务”在二级菜单点击“服务网点查询”3、选择需要维修的设备选择“联想笔记本”4、此时会显示...

联想电脑蓝牙驱动下载(联想电脑蓝牙驱动下载地址)
联想电脑蓝牙驱动下载(联想电脑蓝牙驱动下载地址)

以下是安装联想笔记本蓝牙驱动的步骤:1.访问联想官方网站,找到支持选项卡,选择你的笔记本型号和操作系统,下载最新版本的蓝牙驱动程序。2.查看下载的文件,将其解压缩。3.双击解压缩后的文件,运行安装程序。4.安装向导会出现,按照提示完...

2026-01-17 22:21 liuian

无线网别人可以用我连接上用不了

1、关机重启下;2、看下该类的WiFi是不是需要账号跟密码,若是,那么可以跟对应的商家或者运营商索要账号或者密码进行登录;3、删除该网络重新进行连接尝试下;4、更换其他的WiFi信号进行登录,不排除说...

我的电脑配置在哪里看(自己的电脑配置在哪里看)

1.电脑的配置可以在电脑的系统信息中查看。2.因为电脑的配置信息包括处理器型号、内存容量、硬盘大小等,这些信息可以通过系统信息来获取。3.步骤如下:点击开始菜单,选择“设置”或者“控制面板”,再...

显卡风扇转速怎么调(显卡风扇转速和温度怎么设置合理)
显卡风扇转速怎么调(显卡风扇转速和温度怎么设置合理)

可以通过以下方法调节显卡风扇的转数:1.使用显卡驱动程序中提供的控制工具,一般可以在“高级设置”或“风扇控制”等菜单中找到,然后调节风扇转速的百分比。2.如果你的电脑主板支持,可以在BIOS设置中找到风扇控制选项,手动调节风扇转速。3....

2026-01-17 21:37 liuian

为什么不建议买matebook14(matebook14为什么那么贵)
为什么不建议买matebook14(matebook14为什么那么贵)

缺点:比想象的重(就是拿在手觉得密度非常高的感觉),不能单手开合而且转轴很硬,玻璃面板没有防粘指纹的设计。散热不好,跑软件玩游戏风扇噪音会很大不是雷电接口不是一体化机身,仔细看边角会有些粗糙没有触摸屏,这个感觉是笔记本必须的,在你没鼠标的情...

2026-01-17 21:21 liuian

初学者怎么学电脑

作为初学者学习电脑,以下是一些建议:1.基本操作系统知识:了解常见的操作系统,如Windows、MacOS等。学习基本的操作技巧,如文件管理、软件安装、网络连接等。2.学习常用软件:学习使用常见...

移动硬盘分区好不好(移动硬盘分区好还是不分区好)

看个人需要吧。分区优点可以方便数据分类管理,但注意分区数不能过多。缺点:1.一但定了分区的大小,就很难再改变,而事实上人的想法很容易随着时间发生改变的。一但想变,操作会异常困难,不是一般人能轻易搞...