返回
突破上传瓶颈:vue+axios联手打造实时进度条
前端
2023-11-10 09:52:29
前言
最近在用vue写上传功能时,遇到一个需求,就是在页面上展示上传的进度条。之前写过一次,但那时用的是假交互,直接从0到100。今天,就来分享一下如何用axios自带的onUploadProgress来完成这个小需求。
认识onUploadProgress
onUploadProgress是axios的一个事件侦听器,可以让我们在文件上传过程中,实时获取上传进度。它的语法如下:
onUploadProgress(progressEvent) {
// 这里可以获取上传进度
}
开始实战
1. 安装依赖
首先,需要在项目中安装axios,以及file-saver(用于文件保存):
npm install axios file-saver
2. 编写上传组件
接着,编写一个上传组件,负责文件上传的功能:
<template>
<div>
<input type="file" @change="uploadFile">
<progress v-if="progress" :value="progress" max="100"></progress>
</div>
</template>
<script>
import axios from 'axios'
import fileSaver from 'file-saver'
export default {
data() {
return {
progress: null
}
},
methods: {
uploadFile(event) {
const file = event.target.files[0]
const formData = new FormData()
formData.append('file', file)
axios.post('/upload', formData, {
onUploadProgress: (progressEvent) => {
this.progress = Math.round(progressEvent.loaded * 100 / progressEvent.total)
}
})
.then((response) => {
fileSaver.saveAs(response.data, file.name)
})
}
}
}
</script>
3. 使用上传组件
在需要上传文件的页面,使用这个上传组件即可:
<upload-file></upload-file>
结语
现在,你已经学会了如何使用vue+axios实现文件上传的实时进度条。是不是很简单呢?如果你还有任何问题,欢迎在评论区留言。