2条回答 默认 最新
- m0_54204465 2023-01-12 11:44关注
在使用 element UI 的 el-upload 组件上传文件时,可以使用组件的 before-upload 事件和上传进度的 xhr 事件来实现文件上传进度条的显示。在进度条没有完成之前取消上传可以在这个时候通过abort()方法来终止上传。
示例代码如下:
<template> <el-upload ref="upload" :action="url" :on-progress="handleProgress" :before-upload="handleBeforeUpload" :show-file-list="false" > <el-button slot="trigger" size="small" type="primary">选取文件</el-button> <el-progress :percentage="progress" :text-inside="true" ></el-progress> </el-upload> </template> <script> export default { data() { return { progress: 0, xhr:null } }, methods: { handleBeforeUpload(file) { // 文件上传之前进行判断 if (file.size > maxSize) { this.$message.error(`文件大小不能超过 ${maxSize/1024/1024}MB!`); return false; } this.xhr = new XMLHttpRequest() }, handleProgress(event, file, fileList) { // 更新进度条进度 this.progress = Math.round(event.loaded / event.total * 100) }, cancelUpload(){ // 取消上传 this.xhr.abort() } } } </script>
上述代码中, handleBeforeUpload 方法在文件上传之前被调用,你可以在这里面进行文件的大小检查,并且将xhr对象设置为全局变量,在 handleProgress 中监听文件上传的进度,通过 event.loaded 和 event.total 来计算百分比。
在文件上传之前,如果文件大小超过限制就返回false,不上传这个文件,并且通过cancelUpload函数来终止上传。
另外, 需要注意的是,在 el-upload组件中需要将show-file-list属性设置为false,表示不显示上传文件的列表。
注意: 上面的例子中的maxSize 是自己定义的
另外,如果有需要在进度条上显示文件上传速度或上传时间等信息可以在handleProgress函数中通过performance.now()函数来计算上传时间或者上传速度等信息
例如:
handleProgress(event, file, fileList) { // 计算上传速度 let speed = (event.loaded - this.previousUploaded) / (performance.now() - this.previousTime) this.previousUploaded = event.loaded this.previousTime = performance.now() this.speed = (speed / 1000).toFixed(2) + 'KB/s' }
上面的例子中的previousUploaded, previousTime, speed是通过 data 定义的变量,通过它可以计算文件上传的速度.
需要注意的是,在计算上传速度时,必须保证 上传事件(handleProgress)被触发足够频繁,才能保证数据的准确性。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
- ¥20 怎么用dlib库的算法识别小麦病虫害
- ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
- ¥15 java写代码遇到问题,求帮助
- ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
- ¥15 有了解d3和topogram.js库的吗?有偿请教
- ¥100 任意维数的K均值聚类
- ¥15 stamps做sbas-insar,时序沉降图怎么画
- ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
- ¥15 关于#Java#的问题,如何解决?