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日

相关文章

  • 详解Jest结合Vue-test-utils使用的初步实践

    下面我会详细讲解“详解Jest结合Vue-test-utils使用的初步实践”的完整攻略,并提供两个示例说明。 详解Jest结合Vue-test-utils使用的初步实践 简介 Jest是一个由Facebook开发的JavaScript测试框架,可以帮助我们编写高质量、可维护性强、易于扩展的测试代码。Vue-test-utils是一个用于Vue.js组件测试…

    Vue 2023年5月27日
    00
  • Vue.js中的组件系统

    Vue.js是一个流行的JavaScript框架,其中一个主要的功能是组件系统。组件允许开发人员将页面分解为多个可重用的部分,从而使开发更高效和组件复用更简单。 下面将详细讲解Vue.js的组件系统,并提供两个示例来帮助您理解。 什么是Vue.js中的组件? 在Vue.js中,组件是构建Web页面的可重用元素。在页面中,每个组件都具有自己的HTML模板、Ja…

    Vue 2023年5月27日
    00
  • vue cli实现项目登陆页面流程详解

    下面是“Vue CLI实现项目登录页面流程详解”的完整攻略: 准备工作 首先,安装 Vue CLI,可以通过 npm 命令在终端进行安装: npm install -g @vue/cli 安装完成后,通过 Vue CLI 创建一个新项目: vue create my-project 然后,进入项目目录并启动项目: cd my-project npm run …

    Vue 2023年5月27日
    00
  • Vue如何实现简单的时间轴与时间进度条

    Vue是一款流行的前端框架,用于构建现代化的Web应用程序。时间轴与时间进度条在Web应用程序中非常常见,Vue也提供了丰富的组件来实现这些功能。以下是一个简单的Vue时间轴和进度条的完整攻略。 步骤一:安装Vue CLI并创建项目 首先,我们需要安装Vue CLI并创建项目。Vue CLI是一个命令行工具,可以帮助我们快速创建Vue项目。在命令行中运行以下…

    Vue 2023年5月29日
    00
  • Mock.js在Vue项目中的使用小结

    我们来详细讲解如何在Vue项目中使用Mock.js。 步骤一:安装Mock.js 在Vue项目中使用Mock.js,需要先安装Mock.js的依赖包。可以使用npm进行安装,命令如下: npm install mockjs –save-dev 步骤二:创建mock数据 Mock.js提供了灵活的API可以用来生成随机的数据,从而方便地模拟接口返回的数据。在…

    Vue 2023年5月29日
    00
  • Vue实现附件上传功能

    如何使用Vue实现附件上传功能?下面是一个完整的攻略: 1. 安装依赖 在使用Vue实现附件上传功能之前,需要安装和配置相关依赖。 首先,在项目中安装axios这个库。axios是一个HTTP客户端,主要用于处理跨域请求和在浏览器和Node.js中发送HTTP请求。 在命令行中输入以下命令来安装axios: npm install axios 然后,在项目中…

    Vue 2023年5月28日
    00
  • Vue指令之 v-cloak、v-text、v-html实例详解

    Vue指令之 v-cloak、v-text、v-html实例详解 在Vue中,指令(Directive)是一种特殊的标记,可以在模板中使用,用于动态地将数据渲染到HTML中。指令以“v-”开头,例如v-bind、v-for等。除了常见的指令以外,Vue还提供了一些常用的指令,如v-cloak、v-text和v-html。 v-cloak v-cloak指令是…

    Vue 2023年5月27日
    00
  • Vue中ref、reactive、toRef、toRefs、$refs的基本用法总结

    以下是Vue中ref、reactive、toRef、toRefs、$refs的完整攻略: 1. ref ref 可以将组件或DOM元素在父组件中进行标识。同时,也可以在父组件中使用 $refs 访问到子组件或DOM元素。使用ref的方式如下: <template> <div> <input type="text&quo…

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