当前位置: 首页 > news >正文

vue3+ts+vite+ElementPlus上传进度条实时更新(UPLoad和progress)。

需求:

上传文件时,展示进度条实时更新:

下面是代码片段:

  <!-- 添加媒体弹窗 -- 上传 --><el-dialog v-model="centerDialogVisible" title="媒体信息" width="700" :close-on-click-modal="false"><el-form><el-form-item><span><el-upload class="upload-demo" ref="upLoadRef" :limit="1" multiple drag:http-request="(file: any) => uploadFille(file)" :headers="headers" action="#" :on-success="handleSuccess"><el-icon class="el-icon--upload"><upload-filled /></el-icon><div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div><template #tip><div class="el-upload__tip">图片最大支持20M,视屏最大支持4G,音频最大支持20M,文档最大支持20M,超出大小将不会进行上传.</div></template></el-upload><el-progress :percentage="uploadPercentage"></el-progress></span></el-form-item></el-form></el-dialog>
  • :http-request="(file: any) => uploadFille(file)":自定义文件上传请求的处理函数
  • :headers="headers":设置上传请求的头部信息。
  • :limit="1":限制最多上传一个文件。
  • action="#":设置上传请求的 URL,这里使用 # 作为占位符,实际上传逻辑在 http-request 中处理。
  • :on-success:上传文件成功时候的函数

JavaScript:

这里本来是封装好的请求方法,但是因为进度条问题,只能换成另一种写法。如果伙伴们用原来的这种方法搭配其他可以更新进度条的方法也可以实现实时更新。

原来的:

const uploadFille = ({ file }: any) => {if (file) {try {let formData: any = new FormData()formData.append('file', file)addMedia(formData).then((res: any) => {if (res.code !== 200) return ElMessage.error('上传失败,' + res.msg)handleSuccess()})console.log(formData.get('files'))} catch (error) {console.log(error)}}
}

 修改后的:

const uploadPercentage = ref(0)
//上传 -- 加进度条实时更新
const uploadFille = async ({ file }: any) => {if (file) {try {let formData: any = new FormData()formData.append('file', file)await axios.post(baseURL, formData, {// 更新进度条的函数onUploadProgress: (event: any) => {uploadPercentage.value = Math.floor((event.loaded * 100) / event.total);},headers: {'Content-Type': 'multipart/form-data','Authorization': 'Bearer ' + getToken(),'clientid': import.meta.env.VITE_APP_CLIENT_ID},})} catch (error) {console.log(error)}}uploadPercentage.value = 100;
}// 上传成功事件
const handleSuccess = () => {if( uploadPercentage.value!==100) uploadPercentage.value = 100;ElMessage.success('上传成功')searchMediaHan()
}

到这里我发现了一个不足之处,那就是传不同的文件,有时候上传成功之后,进度条会不到100%就会停止,所以根据代码顺序最后加上 : uploadPercentage.value = 100;

结语:

到这里就结束了,伙伴们还有什么方法,可以多多指教.

http://www.lryc.cn/news/498184.html

相关文章:

  • AspNet WebAPI 模型绑定问题
  • Android 图形系统之七:SurfaceFlinger
  • 14、鸿蒙学习——管理通知角标
  • TongRDS分布式内存数据缓存中间件
  • [在线实验]-RabbitMQ镜像的下载与部署
  • Linux 系统文件描述符(File Descriptor)小白级介绍
  • 【Verilog】实验二 数据选择器的设计与vivado集成开发环境
  • IDL学习笔记(三)OMI数据处理。hdf5文件读取,图像反转,GeoTiff区别,月季年均值计算提取输出,单位转换,运行时间计算
  • 深入浅出:PHP中的数据类型全解析
  • 要使用 OpenResty 创建一个接口,返回客户端的 IP 地址,并以 JSON 格式输出
  • 智慧油客:从初识、再识OceanBase,到全栈上线
  • ClickHouse守护进程
  • 智能合约
  • SQL面试题——拼多多SQL面试题 求连续段的起始位置和结束位置
  • 玩《三角洲行动》遇到游戏运行故障是什么原因?游戏运行故障要怎么解决?预防游戏运行故障问题出现
  • 基于灰色神经网络的订单需求预测
  • 记录学习《手动学习深度学习》这本书的笔记(三)
  • JS中递归函数的理解及展开运算符在递归种的运用理解
  • 人工智能学习用的电脑安装cuda、torch、conda等软件,版本的选择以及多版本切换
  • 提高身份证 OCR 识别 API 接口的准确性的方法
  • PHP面向对象
  • Tomcat新手成长之路:安装部署优化全解析(下)
  • GPT 1到4代的演进笔记
  • vitepress组件库文档项目 markdown语法大全(修正版)
  • Vue3技术开发,使用纯CSS3动手制作一个3D环绕的相册展示效果,支持传入任意图片.3D轮播相册的组件
  • LeetCode 力扣 热题 100道(十五)搜索插入位置(C++)
  • 【035】基于51单片机俄罗斯方块游戏机【Proteus仿真+Keil程序+报告+原理图】
  • NAT traversal 原理 | TCP / UDP/ P2P
  • 如何成长为一名工程技术经理
  • GEE开发之下载海拔、坡度、坡向数据