Upload 组件⾃身具有上传进度处理的 on-progress 属性(⻅⽂档),但设置 http-request 进⾏⾃定义上传后,这个属性就⽆效了。
这时我们可以通过 Axios 的请求配置项 onUploadProgress 进⾏进度监测,onUploadProgress 本质是对 H5 的 xhr.upload.onprogress 的封装。
// services/course.js
…
// 上传图⽚(添加配置项与参数)
export const uploadCourseImage = (data, onUploadProgress) => {
return request({
method: ‘POST’,
url: ‘/boss/course/upload’,
data,
// Axios 将 HTML5 新增的上传进度事件:progress
onUploadProgress (event) {
console.log(event.loaded, event.total)
}
})
}
将 onUploadProgress 设置为参数
// services/course.js
…
// 上传图⽚(添加配置项与参数)
export const uploadCourseImage = (data, onUploadProgress) => {
return request({
method: ‘POST’,
url: ‘/boss/course/upload’,
data,
// Axios 将 HTML5 新增的上传进度事件:progress
onUploadProgress
})
}
上传请求时传⼊进度处理回调,计算百分⽐并保存到 data 中
// course-image.vue
…
data () {
return {
…
// 保存上传进度百分⽐
precentage: 0
}
},
…
async handleUpload (options) {
…
// 设置进度回调,进⾏百分⽐计算
const { data } = await uploadCourseImage(fd, (event) => {
this.precentage = Math.floor(event.loaded / event.total * 100
)
})
…
}
最后将数据绑定给 el-progress 组件即可。
// course-image.vue
…
…
:percentage=“precentage”
>
…
绑定后上传可以正常显示进度,但如果重复上传时进度会出现‘回退’的现象,可以在上传完毕后将precentage 设置归零即可。
// course-image.vue
…
async handleUpload (options) {
…
if (data.code === ‘000000’) {
…
// 上传成功后,设置进度信息归零,避免下次上传出现回退效果
this.precentage = 0
}
}
…
最后可以给进度组件设置 status 以区分上传的不同状态。
// course-image.vue
…
…
:status=“precentage === 100 ? ‘success’ : undefined”
>
…