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中如何监听数组变化

    在Vue中,如何监听数组变化,可以通过Vue提供的一些方法或者使用第三方库来实现。下面是几种常用的方法。 使用Vue提供的$watch和$set方法 Vue提供了$watch和$set方法来监听数组的变化。 $watch $watch可以监听数组的长度变化、数组中某个元素的值的变化以及数组中元素的增删变化。下面是一个示例: // 定义一个数组 let ite…

    Vue 2023年5月28日
    00
  • 基于vue-cli3+typescript的tsx开发模板搭建过程分享

    下面详细讲解在vue-cli3和typescript环境下如何搭建tsx模板的开发环境。 创建一个新项目 首先,我们需要安装vue-cli3脚手架工具,可以使用npm或yarn安装。 npm install -g @vue/cli # 或者 yarn global add @vue/cli 安装完成后,我们使用vue-cli3创建一个新的项目,选择手动配置选…

    Vue 2023年5月27日
    00
  • Springboot实现Java阿里短信发送代码实例

    Springboot实现Java阿里短信发送代码实例 简介 阿里云短信服务提供了短信发送、查询等功能,便于企业进行验证码、营销等短信业务。本文将以Springboot为基础,讲解如何使用Java SDK来实现阿里短信服务。 准备工作 在使用阿里短信服务之前,需要先进行以下准备工作: 在阿里云控制台中开通短信服务并获取Access Key ID和Access …

    Vue 2023年5月28日
    00
  • 22个Vue优化技巧(项目实用)

    下面是对“22个Vue优化技巧(项目实用)”的详细讲解。 一、懒加载路由 描述 使用懒加载路由可以大大提升项目的性能,当路由被访问时才会加载对应的组件,如果不使用懒加载路由,那么全局的所有组件会在项目启动时被加载,浪费大量资源。 示例 在路由文件中使用import语句,将组件打包成一个chunk,当路由被匹配时才会加载: const Foo = () =&g…

    Vue 2023年5月27日
    00
  • vue3的ref,computed,reactive和toRefs你都了解吗

    当然,我很乐意给你讲解。 了解Vue3的ref,computed,reactive以及toRefs Vue3中新增了一些全新的API, 其中包括 ref, computed, reactive和toRefs 。这些新增的API大大提高了数据响应式的效率,让我们更加容易地编写和维护Vue3应用程序。 ref ref允许我们将一个普通值转换为响应式Proxy对象…

    Vue 2023年5月28日
    00
  • vue中v-for 循环对象中的属性

    当你需要在Vue中使用v-for指令循环一个列表时,有时可能需要访问遍历对象中的属性。以下是一个基本的示例: <ul> <li v-for="item in items">{{ item }}</li> </ul> 在上面的示例中,我们访问了items列表中的每个元素,并将它们渲染为一个li…

    Vue 2023年5月28日
    00
  • vue select组件绑定的值为数字类型遇到的问题

    问题描述: 在使用 Vue.js 中的 select 组件时,如果绑定的值是数字类型,会遇到一些问题,例如选择一个选项后,绑定的值不是选项本身的值,而会是选项的索引值。 解决方法: 使用 v-model.number 来强制将输入值转为数字类型。 在 select 标签上使用 v-model.number,可以让 select 组件将选中的值强制转为数字类型…

    Vue 2023年5月29日
    00
  • Vue+Element的后台管理框架的整合实践

    下面我会根据题目需求,讲解“Vue+Element的后台管理框架的整合实践”的完整攻略,具体包括以下几个方面: Vue和Element的基本介绍和安装 Vue.js是一套用于构建用户界面的渐进式 JavaScript 框架,利用它可以实现单页面应用、组件化开发和数据驱动视图等功能。Element是一套基于 Vue 2.0 的桌面端组件库,它提供了一系列的 U…

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