文件上传服务器、文件展示等异步问题

问题:

文件上传模块:当文件已经上传完成,文件进度已经走完了,但是服务器响应还没有返回结果,出现了,获取不到上传后的文件路径,需要等待服务器返回结果后,才能获取文件路径并点击跳转到指定的下载地址。

【时机:文件进度已经100%了但是服务器返回结果还没有返回、获取不到跳转地址】

解决方案:

1.区分有跳转链接和没有链接的text 文本的颜色

2.前端阻塞:当没有服务器没有返回结果的时候,前端手动阻塞 进度条的进度 为 95%,当文件服务器返回结果后,然后手动将进度条置为 100%;

【下面为部分 核心代码】

 <div class="files" ref="filesRef"><div class="files_title">附件列表</div><div class="file" v-for="(item, index) in multipartFiles" :key="item.fileName"><div style="display: flex;flex-direction: column;width: 100%"><div style="display: flex;justify-content: space-between;align-items: center"><div style="display: flex;justify-content: flex-start;align-items: center;"><el-icon v-if="item.percentage===100 && item.response" color="rgba(0,0,0,.45)" size="14"><Link/></el-icon><el-icon v-else class="is-loading"><Loading/></el-icon><a v-if="item.response" :href="item.url" class="name contents" target="_blank">{{item.name}}</a><span v-else class="name contents" style="color: grey;pointer-events: none">{{item.name}}</span></div><el-icon color="rgba(0,0,0,.45)" size="14" @click="handleDelMul(index)"><Delete/></el-icon></div><div style="margin-top: 4px"><!--              5% 等待服务端返回。    核心操作 --><el-progress v-if="!item.response":percentage="item.response&&uploadCompleted?100:Math.max(0,item.percentage - 5)"/></div></div></div></div>
      <ElUploadstyle="margin-left: 2px"class="upload-demo":action="action":headers="{'X-Access-Token': token,}":on-progress="onProgress":show-file-list="false":before-upload="beforeUpload":on-error="handleUploadError":on-success="handleUploadSuccess"multiple><template #trigger><ElButton size="small">上传附件</ElButton></template></ElUpload>

进度条方法:

   function onProgress(progressEvent, file) {if (multipartFiles.value.filter(item => item.uid === file.uid).length === 0) {multipartFiles.value.push(file)}// 计算上传进度百分比file.percentage = parseInt(Math.round((progressEvent.loaded * 100) / progressEvent.total));}

其他方法

    function handleUploadError(error) {console.log('上传失败', error);}const uploadCompleted = ref(false)async function handleUploadSuccess(e) {console.log('上传成功', e.result, multipartFiles.value);if (e.code === 200) {uploadCompleted.value = true;//这里处理上传成功后的逻辑const res = mergeArrays(multipartFiles.value, [e.result])console.log(res, 'res')multipartFiles.value = res;}}// 合并数组并处理重复项 --- 特殊处理function mergeArrays(array1, array2) {// 合并数组并处理重复项return array1.map((item1) => {const item2 = array2.find((item2) => item2.name === item1.name && item2.name === item1.name);if (item2) {return {...item1, ...item2};} else {return item1;}});}

效果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/641622.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt 跨平台开发的一丢丢总结

Qt 跨平台开发 文章目录 Qt 跨平台开发摘要第一 \ & /第二 神奇{不能换行显示第三 预处理宏 关键字&#xff1a; Qt、 win、 linux、 lib、 MSVC 摘要 最近一直在琢磨Qt跨平台开发的问题&#xff0c;缘由有以下几个&#xff0c; 首先第一个&#xff0c;我们目前开发…

1.5 掌握Scala内建控制结构

本次课通过一系列编程任务和案例&#xff0c;深入讲解了Scala编程语言中的控制结构。 条件表达式 Scala的条件表达式使用if-else结构&#xff0c;允许根据条件执行不同的代码分支。与Java相比&#xff0c;Scala的条件表达式更加简洁&#xff0c;并且可以直接返回相应的值。 …

配置网络设备的密码设置以及忘记密码的恢复方式以及实现全网互通

1.实验拓扑图&#xff1a; 2.实验需求&#xff1a; 1.推荐步骤 1.1配置IP&#xff1a; 不过多说了&#xff0c;较为基础&#xff08;略&#xff09; 2.推荐步骤 2.所有网络设备配置console接口密码 首先进入全局模式&#xff0c;输入以下代码(进入接口console接口0给其配置密…

玩原神玩的!30本提升你视野、眼界和格局的好书不如你挑的一本适合自己的书!——早读(逆天打工人爬取热门微信文章解读)

许久不见&#xff0c;雨天坐公车&#xff0c;别是一番滋味在心头 引言Python 代码第一篇 洞见 人民日报推荐&#xff1a;30本提升你视野、眼界和格局的好书第二篇 人民日报 来了&#xff01;新闻早班车要闻社会政策 结尾 不要着急 最好的总会在最不经意的时候出现 意外的六分钟…

Nacos服务注册中心

1.引入依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>2.application.properties中配置 # 应用名称 spring.application.namenacos-aserver…

Vue3炫酷商品卡牌 组件设计

文章目录 演示代码 感谢来自BinaryMoon-CSS 艺术之暗系魔幻卡牌的博文。&#x1f495; 演示 代码 接口类型 export interface CourseBaseVO {/*** 主键*/id: string | number;/*** 机构ID*/companyId: string | number;/*** 课程名称*/name: string;/*** 大分类*/mt: string…

在matplotlib中控制colorbar的长度

在matplotlib中控制colorbar的长度 使用matplotlib绘制带颜色的箭头图&#xff0c;有时想直接把颜色条拿来当比例尺条&#xff0c;就需要控制颜色条的长度。 1. pyplot.colorbar()参数说明 pyplot.colorbar(mappable, ax, cax, **kwargs) mappable是一个ScalarMappble类型的…

01、创建型-单例模式--只有一个实例

文章目录 前言一、基本介绍1.1 什么是单例模式1.2 为什么要用单例模式1.3 应用场景1.4 单例优缺点 二、单例模式的实现方式2.1 饿汉式单例2.1.1 静态变量方式2.1.2 静态代码块 2.2 懒汉式单例2.2.1 懒汉式单例2.2.2 懒汉式优化①-线程安全2.2.2 懒汉式优化②-双重检查锁2.2.3 懒…

[RTOS 学习记录] 工程管理工具make及makefile

[RTOS 学习记录] 工程管理工具make及makefile 这篇文章是我阅读《嵌入式实时操作系统μCOS-II原理及应用》后的读书笔记&#xff0c;记录目的是为了个人后续回顾复习使用。 前置内容&#xff1a; 开发工具 Borland C/C 3.1 精简版 文章目录 1 make 工具2 makefile 的内容结构3…

去雾笔记01-SRKTDN: Applying Super Resolution Method to Dehazing Task

文章目录 Abstract1. Introduction2. Related Work3. Method3.1. Network Architecture Abstract 们提出了一种结合超分辨方法和知识转移方法的模型。我们的模型由一个教师网络、一个去雾网络和一个超分辨率网络组成。 1. Introduction ECNU KT团队提出了一个知识蒸馏[20]模…

发布自己的Docker镜像到DockerHub

学会了Dockerfile生成Docker image 之后&#xff0c;如何上传自己的镜像到 DockerHub呢&#xff1f;下面我以自己制作的 bs-cqhttp 镜像为例&#xff0c;演示一下如何将自己的镜像发布到 Docker 仓库。 1 生成自己的 Docker 镜像 1.1 实例镜像用到的文件 图1 实例镜像制作用到…

ADOP带您了解高性能GPU服务器基础知识(下篇)

众所周知&#xff0c;在大型模型训练中&#xff0c;通常采用每台服务器配备多个GPU的集群架构。在上一篇文章《 》中&#xff0c;我们对GPU网络中的核心术语与概念进行了详尽介绍。本文将进一步深入探讨常见的GPU系统架构。 &#x1f4c8;8台配备NVIDIA A100 GPU的节点/8台…