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

news2024/12/26 21:56:43

问题:

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

【时机:文件进度已经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>
      <ElUpload
          style="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.coloradmin.cn/o/1614987.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FPGA - ZYNQ 基于Axi_Lite的PS和PL交互

前言 在FPGA - ZYNQ 基于EMIO的PS和PL交互中介绍了ZYNQ 中PS端和PL端交互的开发流程&#xff0c;接下来构建基于基于Axi_Lite的PS和PL交互。 开发流程 Axi_Lite从机 在FPGA - AXI4_Lite&#xff08;实现用户端与axi4_lite之间的交互逻辑&#xff09;中&#xff0c;详解介绍…

weblogic反序列化漏洞(CVE-2017-10271)复现

直接用vuluhub搭建现成的靶场做 访问靶场 打开是这样表示成功 想反弹shell 就先开启kali1的nc监听&#xff0c;这就监听2233端口吧 linux&#xff1a;nc -l -p 2233 抓包修改为攻击数据包 ip和端口可以任意修改 反弹的shell 还可以写入文件shell 只需要把提供的poc POS…

4.10 SpringBoot整合Servlet、Filter过滤器和Listener

4.10 整合Servlet、Filter和Listener 1. 启动类1. 整合Servlet2. Filter过滤器3. Listener监听器4. 总结5. JavaWeb三大组件**************************************************** 一般情况下&#xff0c;使用Spring、Spring MVC这些框架之后&#xff0c;基本上就告别Servlet、…

# 从浅入深 学习 SpringCloud 微服务架构(三)注册中心 Eureka(1)

从浅入深 学习 SpringCloud 微服务架构&#xff08;三&#xff09;注册中心 Eureka&#xff08;1&#xff09; 段子手168 1、微服务的注册中心 注册中心可以说是微服务架构中的”通讯录”&#xff0c;它记录了服务和服务地址的映射关系。 在分布式架构中服务会注册到这里&am…

【HCIP学习】重发布和路由策略

一、重发布&#xff08;路由引入&#xff09; 1、背景&#xff1a; 一个网络拓扑中存在多种不同的路由协议&#xff0c;为了使多种不同的路由协议间能相互通信&#xff0c;出现了路由引入 为啥会存在多种不同的网络&#xff1f; 例如&#xff1a;OSPF由于区域架构的限制&am…

web前端 html5+css3相关知识点(跟着黑马学)8

先总结一下网页常见的布局方式&#xff1a; 1. 标准流 块级元素独占一行 -> 垂直布局 行内元素/行内块元素一行显示多个 -> 水平布局 2. 浮动 可以让原本垂直布局的块级元素变成水平布局。 3. 定位 可以让元素自由的摆放在网页的任意位置 一般用于盒子之间的层叠…

【RAG 论文】WikiChat:从 WikiPedia 检索数据来提高 LLM 的事实性的聊天机器人

论文&#xff1a;WikiChat: Stopping the Hallucination of Large Language Model Chatbots by Few-Shot Grounding on Wikipedia ⭐⭐⭐⭐ Stanford University, EMNLP 2023 相关地址&#xff1a; demo 体验地址CodeHuggingface 模型 文章目录 论文速读模型 demo一些其他的细节…

让流程图动起来

我们平时画流程&#xff0c;然后贴到文档&#xff0c;就完事了。但是过程演示的时候&#xff0c;如果只是一张静态图&#xff0c;很难吸引到听众的注意力&#xff0c;表达效果并不太好。常用的方法是可以用PPT进行动态演示&#xff0c;做PPT也是需要花一些时间&#xff0c;同时…

[StartingPoint][Tier2]Base

Task 1 Which two TCP ports are open on the remote host? (远程服务器开放了哪两个TCP端口?) $ nmap -sC -sV 10.129.234.232 22,80 Task 2 What is the relative path on the webserver for the login page? (相关的登录页面路径是什么?) /login/login.php Task 3 …

1 transformers:词典,(文本如何处理)

0 介绍 NLP任务最初&#xff0c;就是在于如何处理文本。无论从TFIDF到word2Vec的过程&#xff0c;还是BERT都是想找到文本的向量表达&#xff0c;如何表示更好处理我们的下游任务。那么&#xff0c;这个过程是如何做的呢&#xff0c;本文主要就是介绍这一个过程&#xff0c;还是…

【C++ 多态】(一)虚函数重写✍

文章目录 1.虚函数重写的三个例外1.1协变(基类与派生类虚函数返回值类型不同)1.2析构函数的重写(基类与派生类析构函数的名字不同)1.3派生类可以不写 virtual 2.面试题✍ 1.虚函数重写的三个例外 1.1协变(基类与派生类虚函数返回值类型不同) ①&#x1f34e;协变的概念&#…

Linux学习之路 -- 进程篇 -- 进程地址空间

目录 一、背景介绍 二、进程地址空间 1.看现象 2.先简单描述一下地址空间&#xff08;地址空间全在操作系统的内部&#xff09; 3.地址空间详细一点的描述 4.进程地址空间里面的内容&#xff08;部分&#xff09; 三、进程地址空间的转换机制 1.页表 2.进程地址空间和页…

牛客NC162 二叉树中和为某一值的路径(三)【中等 dfs C++、Java、Go、PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/965fef32cae14a17a8e86c76ffe3131f 思路 既然要找所有路径上节点和等于目标值的路径个数&#xff0c;那我们肯定先找这样的路径起点啊&#xff0c; 但是我们不知道起点究竟在哪里&#xff0c; 而且任意节点都有…

Navicat 干货 | 掌握 PostgreSQL 规则语法

PostgreSQL 规则提供了一种强大的机制&#xff0c;控制查询执行并在数据库内部实施数据操作。理解规则的语法和用法对于有效利用其功能至关重要。在上周的文章中&#xff0c;我们探讨了 PostgreSQL 规则的工作原理及其与触发器的区别。今天的文章将使用免费的 “dvdrental”示例…

笔记本电脑坏了硬盘数据会丢失吗 笔记本电脑坏了如何取出硬盘的资料 数据恢复软件

笔记本电脑对我们真的非常重要了&#xff0c;是实现无纸化办公和学习的重要工具&#xff0c;但是如果笔记本电脑坏了我们存储在电脑里的资料该怎么办&#xff1f;笔记本电脑坏了硬盘数据会丢失吗&#xff1f;相信有许多朋友都会有这样的担忧。本文今天就为大家解决笔记本电脑坏…

3月衣物清洁行业数据概况和趋势分析:总销额环比上涨超60%!

人们日常生活离不开衣物清洁产品&#xff0c;同时随着生活品质得提高和消费者健康意识得增强&#xff0c;对于衣物清洁行业的需求量与日俱增。作为日常必备的消耗品&#xff0c;衣物清洁产品备受消费者关注。借此&#xff0c;衣物清洁行业在3月份表现出稳定的发展态势。 根据鲸…

【软件测试】关于Web自动化测试

文章目录 &#x1f343;前言&#x1f332;如何实现Web自动化&#x1f6a9;安装驱动管理&#x1f6a9;Selenium库的安装 &#x1f333;自动化常用函数&#x1f6a9;元素的定位&#x1f388;cssSelector&#x1f388;xpath &#x1f6a9;操作测试对象&#x1f388;点击/提交对象—…

洗地机选哪个牌子好?过来人建议买这四款:性价比高质量好

随着生活节奏的加快&#xff0c;洗地机逐渐成为了人们生活中的清洁小能手&#xff0c;但市面上品牌众多&#xff0c;性能参差不齐&#xff0c;消费者往往难以抉择。在选择洗地机时&#xff0c;我们不仅要考虑其清洁效果&#xff0c;还应着重考察性价比。那么&#xff0c;面对如…

3.AlexNet--CNN经典网络模型详解(pytorch实现)

看博客AlexNet--CNN经典网络模型详解&#xff08;pytorch实现&#xff09;_alex的cnn-CSDN博客&#xff0c;该博客的作者写的很详细&#xff0c;是一个简单的目标分类的代码&#xff0c;可以通过该代码深入了解目标检测的简单框架。在这里不作详细的赘述&#xff0c;如果想更深…

[Meachines][Easy]Devvortex

Main $ nmap -p- 10.10.11.242 --min-rate 1000 # echo 10.10.11.242 devvortex.htb>>/etc/hosts 子域名爆破 $ apt install seclists $ wfuzz -c -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -u "http://devvortex.htb/" -H &…