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 对于squad数据集的基于bert模型的微调
- ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
- ¥20 steam下载游戏占用内存
- ¥15 CST保存项目时失败
- ¥15 树莓派5怎么用camera module 3啊
- ¥20 java在应用程序里获取不到扬声器设备
- ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
- ¥15 Attention is all you need 的代码运行
- ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
- ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事: