vue使用el-upload实现文件上传功能

yizhihongxing
  1. 确定需求及环境配置

在使用el-upload组件之前,首先需要确定需求以及进行环境配置。

需求:实现上传文件功能,支持单文件和多文件上传,显示上传进度及结果。

环境配置:Vue.js和Element UI组件库的安装和引入。可以通过npm进行安装:

npm install vue --save
npm install element-ui --save

引入Vue和Element组件库:

import Vue from 'vue'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'

Vue.use(ElementUI)
  1. 创建上传组件

在Vue组件中,通过el-upload组件实现文件上传功能。

<template>
  <el-upload
    :action="uploadUrl"    //上传文件的url地址
    :multiple="multiple"   //是否支持多文件上传
    :auto-upload="false"   //是否开启自动上传
    :show-file-list="false"//是否显示已上传的文件列表
    ref="upload"
    :on-success="onSuccess"//上传成功回调函数
    :on-error="onError"    //上传失败回调函数
  >
    <el-button size="small" type="primary">选择文件</el-button>
    <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
  </el-upload>
</template>

<script>
export default {
  data() {
    return {
      uploadUrl: '/upload',  //上传文件的url地址
      multiple: true,        //是否支持多文件上传
    }
  },
  methods: {
    //上传成功
    onSuccess(response, file, fileList) {
      console.log(fileList)
    },
    //上传失败
    onError (err) {
      console.log(err)
    }
  }
}
</script>

其中,el-upload组件具有多个属性,特别需要说明的是:

  • action:上传文件的url地址;
  • multiple:是否支持多文件上传;
  • auto-upload:是否开启自动上传;
  • show-file-list:是否显示已上传的文件列表。

同时,el-upload组件提供了两个回调函数:

  • onSuccess:上传成功后的回调函数,在此函数中可以获取到上传的文件信息;
  • onError:上传失败后的回调函数,在此函数中可以获取到上传失败的原因信息。

  • 添加上传按钮

在el-upload组件包裹的区域中添加一个上传按钮,用于触发上传文件功能。

<el-upload
  :action="uploadUrl"    //上传文件的url地址
  :multiple="multiple"   //是否支持多文件上传
  :auto-upload="false"   //是否开启自动上传
  :show-file-list="false"//是否显示已上传的文件列表
  ref="upload"
  :on-success="onSuccess"//上传成功回调函数
  :on-error="onError"    //上传失败回调函数
>
  <el-button size="small" type="primary">选择文件</el-button>
  <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
</el-upload>
<el-button type="primary" @click="submitUpload">上传至服务器</el-button>

其中,点击“选择文件”按钮,会弹出系统文件选择框,选择需要上传的文件;点击“上传至服务器”按钮,会将选择的文件上传至服务器。

  1. 触发上传功能

在el-upload组件中,有两种方式触发上传功能:自动上传和手动上传。

手动上传需要在上传按钮触发的方法中,通过调用el-upload组件的upload方法来实现:

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

这样,点击“上传至服务器”按钮时,就会调用submitUpload方法,从而手动触发上传功能。

  1. 示例说明

在上述步骤完成后,我们来看两个简单的示例:单文件上传和多文件上传。

示例一:单文件上传

需要上传文件:1张图片。

代码演示:

<template>
  <el-upload
    :action="uploadUrl"    //上传文件的url地址
    :multiple="false"      //是否支持多文件上传
    :auto-upload="false"   //是否开启自动上传
    :show-file-list="false"//是否显示已上传的文件列表
    ref="upload"
    :on-success="onSuccess"//上传成功回调函数
    :on-error="onError"    //上传失败回调函数
  >
    <el-button size="small" type="primary">选择文件</el-button>
    <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
  </el-upload>
  <el-button type="primary" @click="submitUpload">上传至服务器</el-button>
</template>

<script>
export default {
  data() {
    return {
      uploadUrl: '/upload',  //上传文件的url地址
    }
  },
  methods: {
    //上传成功
    onSuccess(response, file, fileList) {
      console.log(fileList)
    },
    //上传失败
    onError (err) {
      console.log(err)
    },
    //手动上传文件
    submitUpload() {
      this.$refs.upload.submit()
    }
  }
}
</script>

点击“选择文件”按钮,选择一张图片后,点击“上传至服务器”按钮,即可完成文件上传的过程。

示例二:多文件上传

需要上传文件:2张图片。

代码演示:

<template>
  <el-upload
    :action="uploadUrl"    //上传文件的url地址
    :multiple="true"       //是否支持多文件上传
    :auto-upload="false"   //是否开启自动上传
    :show-file-list="false"//是否显示已上传的文件列表
    ref="upload"
    :on-success="onSuccess"//上传成功回调函数
    :on-error="onError"    //上传失败回调函数
  >
    <el-button size="small" type="primary">选择文件</el-button>
    <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
  </el-upload>
  <el-button type="primary" @click="submitUpload">上传至服务器</el-button>
</template>

<script>
export default {
  data() {
    return {
      uploadUrl: '/upload',  //上传文件的url地址
    }
  },
  methods: {
    //上传成功
    onSuccess(response, file, fileList) {
      console.log(fileList)
    },
    //上传失败
    onError (err) {
      console.log(err)
    },
    //手动上传文件
    submitUpload() {
      this.$refs.upload.submit()
    }
  }
}
</script>

点击“选择文件”按钮,选择2张图片后,点击“上传至服务器”按钮,即可完成文件上传的过程。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue使用el-upload实现文件上传功能 - Python技术站

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

相关文章

  • 简单实现Vue的observer和watcher

    首先,要实现Vue的Observer和Watcher,需要进行以下步骤: Observer: Vue中的Observer实现了数据响应式,它可以监听数据的变化并自动更新相应的视图。实现Observer需要使用ES6的Proxy对象来劫持对象或数组的访问。代码示例: function observe(obj) { if(!obj || typeof obj !…

    Vue 2023年5月28日
    00
  • vue的传参方式汇总和router使用技巧

    一、介绍 在Vue框架中,我们经常需要进行组件之间的传值,根据传参的方式不同,我们又可以将其分为props、$emit、vuex、router、cookie等等。其中,props与$emit的传参方式主要用于组件之间传值,其余的传参方式则主要用于组件之间以及前后端之间的数据交互。 在本篇文章中,我们将对vue的传参方式进行详细的汇总,同时也会涉及到route…

    Vue 2023年5月27日
    00
  • java音乐播放器课程设计

    Java音乐播放器课程设计攻略 本文将详细讲解Java音乐播放器的课程设计攻略。该课程设计的主要目标是实现一个简易的音乐播放器,包括音乐文件的播放、暂停、停止、音量调节、进度条显示等功能。 项目基本结构 首先,我们需要明确项目的基本结构。一个典型的Java音乐播放器项目应当包含以下几个部分: 主界面:显示音乐列表,提供播放、暂停、停止等按钮,以及音量和进度条…

    Vue 2023年5月28日
    00
  • vue-cli中的babel配置文件.babelrc实例详解

    Vue-cli中的babel配置文件.babelrc实例详解,这涉及到Vue-cli项目的ES6转码和其他一些相关问题。 1. Babel是什么? Babel是一个广受欢迎的JavaScript编译器,它可以将ES6(ES2015)以上的JavaScript代码编译为ES5代码。由于许多浏览器缺乏支持,因此Babel可以使你在更多的浏览器环境中实现更先进的J…

    Vue 2023年5月28日
    00
  • 基于Vue2.X的路由和钩子函数详解

    基于Vue2.X的路由和钩子函数详解 前言 在Vue.js应用程序中,路由用于控制页面的导航和显示,同时路由钩子函数可以执行一些特定的操作,如在路由改变前后进行某些操作。 本文将详解Vue.js的路由和钩子函数的使用方法。 Vue.js路由 安装 Vue Router 我们使用npm进行包的安装。在命令行中输入以下命令: npm install vue-ro…

    Vue 2023年5月28日
    00
  • vue.js实现带日期星期的数字时钟功能示例

    接下来我将为您详细介绍“vue.js实现带日期星期的数字时钟功能示例”的完整攻略。 总体思路 本次实现将分为以下几步:1. 引入Vue.js2. 构建Vue实例3. 组件化设计钟表组件4. 实现数字时钟功能5. 实现带日期星期的效果 构建Vue实例 在index.html文件中引入Vue.js的CDN: <script src="https:…

    Vue 2023年5月29日
    00
  • 详解vue axios二次封装

    下面是“详解vue axios二次封装”的完整攻略。 一、为什么需要封装axios? 在Vue应用中发起网络请求,一般会选择使用axios库。因为axios具有一系列强大的功能,比如:支持Promise,支持取消请求,拦截请求和响应,自动转换JSON格式等。但是,如果我们直接使用axios,会有一些不方便的地方,比如:每个请求都需要设置baseUrl、每个请…

    Vue 2023年5月28日
    00
  • vue踩坑记录:属性报undefined错误问题

    当你使用Vue.js构建自己的应用时,可能会遇到属性报undefined错误问题,这种问题会造成很大的困扰。下面让我们详细讲解一下怎么解决这个问题。 问题原因 首先我们需要明确这个错误的原因,常见的错误原因有以下几种: 将变量名写错了。 Vue组件的作用域问题。 Vue组件内部的变量和外部的变量命名冲突问题。 快速解决 如果您遇到属性报undefined错误…

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