详解Vue ElementUI手动上传excel文件到服务器

下面是详解Vue ElementUI手动上传excel文件到服务器的完整攻略:

1. 前置条件

在进行该操作前,需要确保已经有Vue项目,并且已经安装了ElementUI组件库,同时服务器上已经搭建好了接收文件的API接口。

2. 准备工作

首先,在Vue组件中引入ElementUI组件库,并添加上传文件的组件:

<template>
  <div>
    <el-upload
      class="upload-demo"
      :action="uploadURL"
      :on-change="handleChange"
      :before-upload="beforeUpload"
      :auto-upload="false"
      :file-list="fileList"
      ref="upload"
      multiple>
      <el-button slot="trigger" type="primary">
        <i class="el-icon-upload"></i> 选择文件
      </el-button>
      <el-button
        type="success"
        @click.prevent="submitUpload"
        :disabled="!fileList.length">
        <i class="el-icon-upload2"></i> 上传到服务器
      </el-button>
      <div slot="tip" class="el-upload__tip">支持扩展名:xls、xlsx</div>
    </el-upload>
  </div>
</template>

其中,uploadURL是上传文件到服务器的API地址,handleChange是上传文件变化后的回调函数,beforeUpload是上传文件前进行的处理函数,fileList是上传的文件列表。

接下来,需要定义这些方法:

methods: {
  // 上传文件前的处理函数
  beforeUpload(file) {
    const isExcel = ['application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'].indexOf(file.type) > -1
    if (!isExcel) {
      this.$message.error('上传文件只能是 xls/xlsx 格式!')
      return false
    }
  },

  // 上传文件变化后的回调函数
  handleChange(file, fileList) {
    this.fileList = fileList.slice(-1)
  },

  // 手动触发上传
  submitUpload() {
    this.$refs.upload.submit()
  }
}

其中,beforeUpload函数用来校验文件类型是否为Excel文件,handleChange函数用来保证只上传最后一个文件,submitUpload函数用来手动触发上传。

至此,我们已经成功添加了文件上传组件,并能够手动上传Excel文件,但是还无法将文件上传到服务器。

3. 使用axios向服务器发送请求

在上传文件时,可以使用axios库向服务器发送请求。首先,在Vue项目中安装axios:

npm install axios

接下来,添加以下代码:

import axios from 'axios'

export default {
  name: 'FileUpload',
  data() {
    return {
      uploadURL: 'http://www.example.com/file/upload',
      fileList: []
    }
  },
  methods: {
    // 上传文件前的处理函数
    beforeUpload(file) {
      const isExcel = ['application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'].indexOf(file.type) > -1
      if (!isExcel) {
        this.$message.error('上传文件只能是 xls/xlsx 格式!')
        return false
      }
    },

    // 上传文件变化后的回调函数
    handleChange(file, fileList) {
      this.fileList = fileList.slice(-1)
    },

    // 手动触发上传
    submitUpload() {
      const formData = new FormData()
      formData.append('file', this.fileList[0].raw)
      axios({
        url: this.uploadURL,
        method: 'post',
        headers: {
          'Content-Type': 'multipart/form-data'
        },
        data: formData
      }).then(response => {
        this.$message.success('上传成功!')
      }).catch(error => {
        this.$message.error('上传失败!')
      })
    }
  }
}

其中,FormData对象用于上传文件,axios库用于向服务器发送请求,submitUpload函数中的代码将文件转换成FormData对象,同时指定请求方法和请求头,最后使用axios库发送请求。

4. 示例

以下是一个完整的示例,可以将Excel文件上传到服务器,并在成功上传后显示上传成功的提示。

<template>
  <div>
    <el-upload
      class="upload-demo"
      :action="uploadURL"
      :on-change="handleChange"
      :before-upload="beforeUpload"
      :auto-upload="false"
      :file-list="fileList"
      ref="upload"
      multiple>
      <el-button slot="trigger" type="primary">
        <i class="el-icon-upload"></i> 选择文件
      </el-button>
      <el-button
        type="success"
        @click.prevent="submitUpload"
        :disabled="!fileList.length">
        <i class="el-icon-upload2"></i> 上传到服务器
      </el-button>
      <div slot="tip" class="el-upload__tip">支持扩展名:xls、xlsx</div>
    </el-upload>
  </div>
</template>

<script>
import axios from 'axios'

export default {
  name: 'FileUpload',
  data() {
    return {
      uploadURL: 'http://www.example.com/file/upload',
      fileList: []
    }
  },
  methods: {
    // 上传文件前的处理函数
    beforeUpload(file) {
      const isExcel = ['application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'].indexOf(file.type) > -1
      if (!isExcel) {
        this.$message.error('上传文件只能是 xls/xlsx 格式!')
        return false
      }
    },

    // 上传文件变化后的回调函数
    handleChange(file, fileList) {
      this.fileList = fileList.slice(-1)
    },

    // 手动触发上传
    submitUpload() {
      const formData = new FormData()
      formData.append('file', this.fileList[0].raw)
      axios({
        url: this.uploadURL,
        method: 'post',
        headers: {
          'Content-Type': 'multipart/form-data'
        },
        data: formData
      }).then(response => {
        this.$message.success('上传成功!')
      }).catch(error => {
        this.$message.error('上传失败!')
      })
    }
  }
}
</script>

希望这份攻略能够帮助你完成Vue ElementUI手动上传excel文件到服务器的操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Vue ElementUI手动上传excel文件到服务器 - Python技术站

(1)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • element日历calendar组件上月、今天、下月、日历块点击事件及模板源码

    下面是详细讲解 “element 日历 calendar 组件上月、今天、下月、日历块点击事件及模板源码”的完整攻略。 1. 功能说明 element 日历 calendar 组件是一款强大的日期选择组件,常用于项目中的日期选择、预约等场景。在本篇攻略中,将详细讲解其上月、今天、下月、日历块点击事件及模板源码等内容。 上月、下月按钮点击事件:点击上月、下月后…

    Vue 2023年5月29日
    00
  • vue+springboot+element+vue-resource实现文件上传教程

    下面是详细的“vue+springboot+element+vue-resource实现文件上传教程”的完整攻略: 1. 前端实现 1.1. 安装vue-resource npm install vue-resource –save 1.2. 引入element-ui 并引入element-ui中的el-upload组件来实现文件上传功能 import {…

    Vue 2023年5月28日
    00
  • vue.js中toast用法及使用toast弹框的实例代码

    下面是关于“vue.js中toast用法及使用toast弹框的实例代码”的攻略。 什么是Toast Toast是移动端或Web端的一种轻量级提示框架,常用于简短的操作提示,例如登录成功、数据保存、网络错误、支付完成等提示。 在Vue.js中,常用的全局提示框插件有vue-toasted、vux和mint-ui等。下面分别介绍这三个插件的使用方法和示例代码。 …

    Vue 2023年5月28日
    00
  • vue之webpack -v报错解决方案总结

    下面是“vue之webpack -v报错解决方案总结”的完整攻略。 问题描述 在使用Vue CLI创建项目或运行已有项目时,可能会出现以下错误提示: sh: webpack: command not found 这个错误提示表示无法找到webpack命令,这将导致无法完成项目的构建和打包。 解决方案 方案一:全局安装webpack 可以尝试全局安装最新版本的…

    Vue 2023年5月28日
    00
  • Vue 开发必须知道的36个技巧(小结)

    Vue 开发必须知道的36个技巧(小结) 本文总结了36个Vue开发中必须知道的技巧,内容涵盖了组件开发、状态管理、路由导航、性能优化等多个方面的技巧。 组件开发篇 Tip1:合理使用computed computed是一个非常强大的特性,但也有很多约束,比如它会缓存计算结果;还要注意它不应该有任何副效应,也不应该修改任何数据。所以,在使用computed …

    Vue 2023年5月27日
    00
  • 基于mpvue搭建微信小程序项目框架的教程详解

    基于mpvue搭建微信小程序项目框架的教程详解由以下几个部分组成: 1. 准备工作 在开始项目之前,我们需要进行一些准备工作: 1.1 安装mpvue mpvue是一个基于Vue.js的小程序开发框架,可以让我们使用Vue.js语法来进行小程序开发。在命令行中输入如下命令安装mpvue: npm install -g vue-cli vue init mpv…

    Vue 2023年5月27日
    00
  • vue获取验证码倒计时组件

    下面就让我来详细讲解一下 “Vue获取验证码倒计时组件” 的完整攻略。 一、需求分析 在现代应用程序中,验证码是非常重要的。 许多应用程序需要验证码以增加安全性。因此需要一个验证码组件,这个组件的功能应该是根据用户点击发送验证码按钮时,开始倒计时,在倒计时结束之前,用户不能再次发送验证码,同时按钮的文本要实时更新显示倒计时。 二、技术选型 在Vue.js中可…

    Vue 2023年5月29日
    00
  • React中props使用教程

    React中props使用教程 在React中,props是组件间通信的主要方式之一。通过props,我们可以将数据从一个组件传递到另一个组件。本教程将详细讲解props的使用方法。 什么是props props(即“properties”,中文翻译为“属性”)是组件中的一种数据传递机制。通过props,我们可以向组件传递数据,就像向函数传递参数一样。pro…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部