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

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

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

最近构思实现了一个小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快捷键是【Win+Alt+G】,可以使用快捷键录屏。电脑自带的录屏功能操作步骤如下:演示机型:戴尔成就13.3系统版本:Windows10软件版本:XboxG...

电脑桌面没有图标怎么办(电脑桌面没有图标怎么修复)

电脑桌面没有图标,可能是由于多种原因造成的。首先,可能是由于桌面上的图标被隐藏了,这时你可以通过在桌面空白处右键点击“查看”-“显示桌面图标”来恢复图标的显示。另外,也有可能是由于桌面上的文件被删除或...

系统软件主要包括哪四个(系统软件主要包括哪五个)

计算机是由硬件系统(hardwaresystem)和软件系统(softwaresystem)两部分组成的。1、传统电脑系统的硬体单元一般可分为输入单元、输出单元、算术逻辑单元、控制单元及记忆单元...

电脑任务栏不显示了怎么办(电脑任务栏不显示图标怎么办)
  • 电脑任务栏不显示了怎么办(电脑任务栏不显示图标怎么办)
  • 电脑任务栏不显示了怎么办(电脑任务栏不显示图标怎么办)
  • 电脑任务栏不显示了怎么办(电脑任务栏不显示图标怎么办)
  • 电脑任务栏不显示了怎么办(电脑任务栏不显示图标怎么办)
电脑桌面壁纸高清图片全屏(电脑桌面壁纸图片简约)

如果您的电脑壁纸不是全屏的,可以按照以下步骤进行调整:找到您想要设置为壁纸的图片,右键单击并选择“设置为桌面背景”。如果您的图片尺寸较小,可能会出现不占满屏幕的情况。此时,您可以右键单击桌面,选择“个...

台式电脑显示屏亮度怎么调暗

  1、我们先要找到自己的显示器上,这个单独的键,一般是在显示器的右下角,也有可能是在后面的。大家自己找一下,我这个是在右下角的。电脑显示器调节屏幕亮度  2、我们按一下这个键,调出屏幕菜单,从左往右...

w7系统摄像头在哪里打开(win7系统摄像头怎么调出来)

要调出Win7摄像头,可以按照以下步骤操作:确保摄像头已经连接到计算机,并且正常工作。点击开始菜单,选择控制面板。在控制面板中,找到并点击“硬件和声音”。在硬件和声音页面中,找到并点击“设备和打印机”...

台式电脑屏幕分辨率怎么调(台式电脑的分辨率怎么调)

显示器对比度一般可设置在80-100。亮度一般设置在60-80,过亮易造成眼睛疲劳,也使荧光粉过早老化。如果在不用的时候,一定要关闭显示器或者降低显示器的显示亮度,否则时间长了,就会导致内部烧坏或者老...

正版系统安装(正版系统安装不了软件)

以windows7操作系统为例1、将windows7原版操作系统解压至D盘;2、打开解压的windows7文件夹,然后选择点击setup.exe进行下一步;3、打开安装向导,点击“现在安装”;4、安装...

win10企业版英文(win10企业版英文改中文版)

win10专业版的英文全称是Windows10Professional1。虽然官网和其他渠道没有提供独立的win10专业版版本下载,但是用户下载的win10专业版系统名称基本都是Windows1...

hp驱动安装(hp驱动安装 检测到新打印机)

惠普官方的标准操作:HPM126A安装驱动步骤:如果已经安装过,并没有成功,如下处理1:先删掉打印任务,再删掉打印机2:控制面板---程序----卸载打印驱动和scanto。重启计算机。3:不要...

字体如何安装(字体如何安装在电脑上)

回答如下:1.首先,从互联网上下载所需的字体文件(通常是.ttf或.otf格式)。2.将下载的字体文件拷贝到手机的存储卡或内存中的任意位置。3.打开手机的设置界面,找到“字体大小和样式”选项。4...

hp1020plus驱动支持win10(hp1020plus驱动怎么安装)

一、下载驱动:①到惠普官网,输入打印机型号作为关键词搜索一下。②找到之后,点选操作系统(还分32位和64位)。③保存到操作系统的非系统盘(比如D盘)。二、安装打印机步骤:①插上打印机电源线,按下开关。...

游戏电脑笔记本品牌排行榜(游戏笔记本电脑品牌有哪些)
  • 游戏电脑笔记本品牌排行榜(游戏笔记本电脑品牌有哪些)
  • 游戏电脑笔记本品牌排行榜(游戏笔记本电脑品牌有哪些)
  • 游戏电脑笔记本品牌排行榜(游戏笔记本电脑品牌有哪些)
  • 游戏电脑笔记本品牌排行榜(游戏笔记本电脑品牌有哪些)
win7升级win10离线(win7离线更新包安装)

在原有windows7操作系统下,如果在不联网的情况下要升级到windows10的系统建议用户去购买windows10的安装光盘,从光驱进行引导安装,或者我们也可以通过能够接入互联网的计算机,下载wi...