vue实现实时上传文件进度条

实现文件上传进度条需要借助一些第三方库,如axiosvue-progressbar,下面是具体的实现步骤和示例代码。

步骤一:安装所需库

首先要安装axiosvue-progressbar库,可以通过npm进行安装,命令如下:

npm install axios vue-progressbar --save

步骤二:创建Vue实例并引入Vue进度条插件

在Vue实例中引入vue-progressbar插件,并自定义进度条的样式,代码如下:

import Vue from 'vue'
import VueProgressBar from 'vue-progressbar'

Vue.use(VueProgressBar, {
  color: 'rgb(35, 137, 218)',
  failedColor: 'red',
  thickness: '3px',
  transition: {
    speed: '0.2s',
    opacity: '0.6s',
    termination: 300
  },
  autoRevert: true,
  location: 'top',
  inverse: false
})

步骤三:创建上传文件组件并实现上传方法

在Vue组件中创建上传文件的方法,并使用axios库来进行文件上传,同时在上传过程中调用进度条的方法来实现实时上传进度的显示。

<template>
  <div>
    <input type="file" @change="onFileChange"/>
    <button @click="uploadFile">上传</button>
  </div>
</template>

<script>
import axios from 'axios'
import { progressBar } from 'vue-progressbar' // 引入进度条相关方法

export default {
  name: 'UploadFile',

  methods: {
    onFileChange(event) {
      this.file = event.target.files[0]
    },

    uploadFile() {
      let formData = new FormData()
      formData.append('file', this.file)

      // 发起文件上传请求,同时使用进度条方法来实现实时进度显示
      axios.post('/upload', formData, {
        headers: {
          'Content-Type': 'multipart/form-data'
        },
        onUploadProgress: function(progressEvent) {
          progressBar.$Progress.set((progressEvent.loaded / progressEvent.total) * 100)
        }
      })
      .then(response => {
        console.log(response)
      })
      .catch(error => {
        console.log(error)
      })
    }
  }
}
</script>

示例一:使用element-ui实现上传文件进度条

下面是使用element-ui库来实现上传文件进度条的示例代码:

<template>
  <div>
    <el-upload
      action="/upload"
      :before-upload="beforeUpload"
      :on-progress="onProgress"
      :on-success="onSuccess">
      <el-button>点击上传</el-button>
    </el-upload>
  </div>
</template>

<script>
import axios from 'axios'
import { Loading } from 'element-ui'

export default {
  name: 'UploadFile',

  data() {
    return {
      loadingInstance: null
    }
  },

  methods: {
    beforeUpload() {
      // 创建弹出框等待提示
      this.loadingInstance = Loading.service({
        fullscreen: true,
        text: '文件上传中...'
      })
    },

    onProgress(event) {
      // 进度条显示上传进度
      this.loadingInstance.setText(`文件上传中...${event.percent}%`)
    },

    onSuccess(response, file, fileList) {
      // 关闭弹出框等待提示
      this.loadingInstance.close()
      console.log(response)
    }
  }
}
</script>

示例二:使用iview实现上传文件进度条

下面是使用iview库来实现上传文件进度条的示例代码:

<template>
  <div>
    <i-upload
      name="file"
      action="/upload"
      :on-progress="onProgress"
      :custom-request="customRequest"
      show-upload-list>
      <div style="padding: 20px;">
        <Icon type="ios-cloud-upload" size="52" style="color: #3399FF"></Icon>
        <p>将文件拖到此处,或<i-button type="primary">点击上传</i-button></p>
      </div>
    </i-upload>
  </div>
</template>

<script>
import axios from 'axios'

export default {
  name: 'UploadFile',

  methods: {
    onProgress(event) {
      // 设置上传进度
      this.$refs.upload.updateProgress(event.percent)
    },

    customRequest(options) {
      // 创建FormData对象,并存入文件数据
      let formData = new FormData()
      formData.append('file', options.file)

      // 发送上传请求
      axios.post(options.action, formData, {
        headers: {
          'Content-Type': 'multipart/form-data'
        },
        onUploadProgress: function (progressEvent) {
          // 设置上传进度
          options.onProgress(progressEvent)
        }
      })
      .then(response => {
        console.log(response)
      })
      .catch(error => {
        console.log(error)
      })
    }
  }
}
</script>

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue实现实时上传文件进度条 - Python技术站

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

相关文章

  • Vue this.$router.push(参数)实现页面跳转操作

    当我们使用Vue.js构建单页面应用时,有时需要在不同的页面之间进行路由跳转。Vue Router提供了一些方法来实现这一功能,其中之一是$this.$router.push()方法。以下是关于如何使用$this.$router.push()方法实现页面跳转操作的完整攻略。 前置准备 要使用Vue Router,需先安装Vue Router模块并配置路由。 …

    Vue 2023年5月27日
    00
  • 基于vue实现8小时带刻度的时间轴根据当前时间实时定位功能

    下面是基于Vue实现8小时带刻度的时间轴根据当前时间实时定位功能的完整攻略: 1.需求分析 时间轴分为8个小时 时间轴刻度需对应具体时刻,如每小时1个刻度 时间轴需根据当前实际时间进行实时定位,可自动滚动到相应时刻 2. 实现方式 使用Vue框架实现,具体步骤如下: 2.1 创建Vue项目 创建一个新项目,命名为time-axis,安装所需依赖: // 安装…

    Vue 2023年5月28日
    00
  • SpringBoot实现滑块验证码验证登陆校验功能详解

    下面我将为你详细讲解“SpringBoot实现滑块验证码验证登陆校验功能”的完整攻略。 1. 概述 在本文中,我们将介绍使用SpringBoot来实现滑块验证码验证登陆校验功能的完整攻略。其中,我们使用了阿里云的滑块验证码服务和Spring Security框架来完成。 本文将分为以下几个部分: 阿里云滑块验证码服务介绍 SpringBoot集成阿里云滑块验…

    Vue 2023年5月28日
    00
  • vue-cli3.0之配置productionGzip方式

    下面是“vue-cli3.0之配置productionGzip方式”的完整攻略: 安装相关依赖 npm install compression-webpack-plugin@^2.0.0 –save-dev 配置vue.config.js文件 在项目根目录下找到vue.config.js文件,若没有则新建一个,将以下代码复制进去: const Compre…

    Vue 2023年5月28日
    00
  • vue项目使用node连接数据库的方法(前后端分离)

    在Vue项目中使用Node连接数据库,主要的实现方式是通过Node.js提供的MySQL模块来进行连接,这个模块可以通过npm进行安装。具体步骤如下: 安装MySQL模块 在Node的环境下,可以使用npm进行MySQL模块的安装。在项目根目录运行以下命令: npm install mysql 连接数据库 在项目的后端代码中,使用以下代码进行数据库连接: c…

    Vue 2023年5月28日
    00
  • Vue六大基本类型中的原始值响应式

    Vue六大基本类型中的原始值响应式是指 Vue 对于 JavaScript 基本数据类型的响应式实现,包括 Number、String、Boolean 和 Symbol 四个类型的数据。 Vue 对于这些数据类型的响应式实现是通过 Object.defineProperty() 方法来实现的。当 Vue 检测到数据发生变化时,会调用数据的 setter 方法…

    Vue 2023年5月28日
    00
  • 如何在 Vue 中使用 Axios 异步请求API

    下面我来详细讲解一下如何在 Vue 中使用 Axios 异步请求 API 的完整攻略。 1. 安装 Axios 在使用 Axios 之前,我们需要先安装它。可以通过 npm 安装: npm install axios –save 或者通过 yarn 安装: yarn add axios 2. 在 Vue 中使用 Axios 在 Vue 中使用 Axios …

    Vue 2023年5月28日
    00
  • vue.config.js完整配置教程

    下面是“vue.config.js完整配置教程”的完整攻略。 1. 什么是vue.config.js文件 vue.config.js是一个可选的配置文件,如果项目的根目录中存在vue.config.js文件,那么它会被@vue/cli-service自动加载。你也可以通过这个文件来自定义@vue/cli-service的一些行为,或者是扩展Webpack配置…

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