vue+element-ui+axios多文件上传的实现并显示整体进度

下面我会详细讲解“vue+element-ui+axios多文件上传的实现并显示整体进度”的完整攻略,具体分为以下几个步骤:

第一步:安装所需依赖

在使用这种方式进行文件上传时,我们需要用到vue、element-ui和axios这几个主要的依赖。因此,首先需要在项目中安装它们:

npm install vue element-ui axios --save

第二步:在vue中实现上传文件的组件

我们可以通过封装一个组件来实现文件上传功能。该组件中应该包含以下内容:

  • 添加上传文件的表单组件,使用element-ui实现;

  • 配置el-upload的属性,其中action指向上传文件的接口,headers中设置请求头,multiple表示可以选择多个文件,show-file-list表示显示上传文件列表,on-progress表示上传进度回调函数;

  • 实现上传文件的方法,在该方法中调用axios实现文件上传,将返回的上传进度和文件信息进行保存;

  • 添加上传进度条组件,配合整体上传进度的展示;

这里给出一个示例代码,在代码中我们上传两个文件,同时展示整体上传进度的效果:

<template>
  <div>
    <el-upload
      class="upload-demo"
      action="https://jsonplaceholder.typicode.com/posts/"
      :headers="{Authorization: 'Bearer ' + token}"
      multiple
      show-file-list
      on-progress="handleProgress"
      :on-success="handleSuccess">
      <el-button slot="trigger" size="small" type="primary">点击上传</el-button>
      <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
    </el-upload>
    <el-progress :percentage="uploadPercentage" :status="uploadStatus" :stroke-width="2" type="circle" style="width: 50px;"/>
  </div>
</template>

<script>
import axios from 'axios';

export default {
  data() {
    return {
      token: '',
      uploadPercentage: 0,
      uploadStatus: '',
    }
  },
  methods: {
    handleProgress(event, file, fileList) {
      this.uploadPercentage = event.percent;
    },
    handleSuccess(response, file, fileList) {
      this.uploadPercentage = 0;
      this.uploadStatus = 'success';
      console.log(fileList);
    },
    async uploadFile(file) {
      let formData = new FormData();
      formData.append('file', file);
      let response = await axios.post('https://jsonplaceholder.typicode.com/posts/', formData, {
        headers: {
          'Content-Type': 'multipart/form-data',
          Authorization: 'Bearer ' + this.token,
        },
        onUploadProgress: (progressEvent) => {
          this.uploadPercentage = parseInt(Math.round((progressEvent.loaded * 100) / progressEvent.total));
        },
      });
      return response;
    },
  },
};
</script>

<style scoped>
.upload-demo {
  margin-bottom: 20px;
}
</style>

第三步:整体上传进度显示

在上传多个文件时,我们需要实现整体上传进度的展示。因此,我们可以通过计算上传的文件数量与成功上传的文件数量比值来实现整体上传进度的展示。

下面是示例代码,其中handleSuccess方法中的uploadedFiles为已上传的文件列表:

<script>
import axios from 'axios';

export default {
  data() {
    return {
      token: '',
      uploadPercentage: 0,
      uploadStatus: '',
      uploadedFiles: [],
      uploadedFilesCount: 0,
    }
  },
  methods: {
    handleProgress(event, file, fileList) {
      this.uploadPercentage = event.percent;
    },
    handleSuccess(response, file, fileList) {
      this.uploadPercentage = 0;
      this.uploadStatus = 'success';
      this.uploadedFiles.push(file);
      this.uploadedFilesCount = this.uploadedFiles.filter(item => item.status == 'success').length / fileList.length * 100;
      console.log(this.uploadedFiles);
    },
    async uploadFile(file) {
      let formData = new FormData();
      formData.append('file', file);
      let response = await axios.post('https://jsonplaceholder.typicode.com/posts/', formData, {
        headers: {
          'Content-Type': 'multipart/form-data',
          Authorization: 'Bearer ' + this.token,
        },
        onUploadProgress: (progressEvent) => {
          this.uploadPercentage = parseInt(Math.round((progressEvent.loaded * 100) / progressEvent.total));
        },
      });
      return response;
    },
  },
};
</script>

第四步:总结

通过上述步骤我们可以实现vue+element-ui+axios多文件上传的实现并显示整体进度。其中,主要需要注意的是在使用axios进行文件上传时,我们需要将提交的内容进行封装。另外,在组件中利用FileList管理上传文件列表,可以方便地进行文件上传管理。

以上是一个简单的示例,如果需要上传大量或者较大的文件,需要进行优化。比如,可以将文件分片上传、增加上传操作中断功能等。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue+element-ui+axios多文件上传的实现并显示整体进度 - Python技术站

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

相关文章

  • Vue中computed(计算属性)和watch(监听属性)的用法及区别说明

    下面是关于“Vue中computed(计算属性)和watch(监听属性)的用法及区别说明”的完整攻略。 1. computed(计算属性) computed是一种在Vue中用于计算属性的方法,它一般用于需要进行复杂计算的场景。computed其实是一个类似于getter/setter的方法,当它所依赖的值发生改变时,它才会重新计算。 computed示例代码…

    Vue 2023年5月28日
    00
  • Vue编译器实现代码生成方法介绍

    Vue编译器实现代码生成方法介绍 概述 Vue编译器将Vue模板编译成渲染函数,从而在浏览器上渲染出真正的页面。代码生成是Vue编译器实现的关键部分之一。它将预处理过的模板转化为可以直接执行的渲染函数。 在进行代码生成时,Vue编译器会通过模板语法分析器将模板转化为抽象语法树(AST),接着对AST进行优化处理,最后再将AST转换为渲染函数的JavaScri…

    Vue 2023年5月27日
    00
  • vue项目配置eslint保存自动格式化问题

    下面是关于Vue项目配置ESLint保存自动格式化的完整攻略: 安装相关插件 首先,需要在Vue项目中安装eslint和eslint-plugin-prettier两个插件,可以使用npm安装,命令如下: npm install eslint eslint-plugin-prettier –save-dev 配置.eslintrc.js文件 在Vue项目的…

    Vue 2023年5月28日
    00
  • 深入了解vue-router原理并实现一个小demo

    介绍 Vue-Router 是 Vue.js 官方的路由管理器,它和 Vue.js 核心深度集成,让构建单页面应用变得易如反掌。Vue-Router 提供了两种模式:Hash 模式和 History 模式。Hash 模式下,URL 中的 Hash 值(#)用来模拟传统意义上的路由,而在 History 模式下,使用了 HTML5 History API 中新…

    Vue 2023年5月28日
    00
  • vant使用datetime-picker组件设置maxDate和minDate的坑及解决

    关于“vant使用datetime-picker组件设置maxDate和minDate的坑及解决”的攻略,我整理了如下内容: 问题描述 在使用Vant组件库中的DateTimePicker组件时,需要设置maxDate和minDate参数控制可选范围。但是,这两个参数的设定并不是特别顺利,可能会出现一些问题,例如: 输入的日期不符合要求,仍然可以选择 只有时…

    Vue 2023年5月29日
    00
  • vue composition-api 封装组合式函数的操作方法

    下面是对“Vue composition-api 封装组合式函数的操作方法”的详细讲解攻略: 什么是 Vue Composition API Vue Composition API 是 Vue 3 新增的 API ,用于更灵活的组合逻辑复杂的逻辑和行为。它与 Vue 2.x 中的 Options API 不同,Options API 是基于选项进行开发的。在…

    Vue 2023年5月28日
    00
  • vue 修改 data 数据问题并实时显示操作

    当我们使用 Vue.js 开发 web 应用时,我们经常需要对数据进行修改并实时显示到页面上。下面是实现这一目标的完整攻略: 一、改变 data 中的数据 Vue.js 本来就是一个响应式框架,修改 data 中的数据仅需使用 Vue 实例的 $set 方法即可。在修改 data 中的数据时,需要注意以下几点: 1.需要先定义好 data 中的属性(键),否…

    Vue 2023年5月29日
    00
  • 如何在vue3+ts项目中使用query和params传参

    在Vue3 + TypeScript项目中,我们可以通过组合使用 params 和 query 来实现路由传参。下面是具体的步骤: 1. 安装路由 首先,我们需要通过 npm 或者 yarn 来安装 vue-router 路由插件。可以使用以下命令进行安装: npm install vue-router yarn add vue-router 2. 创建路由…

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