[前端]每间隔一段时间查询接口获取到百分比,在页面上按照百分比展示进度条,百分比进度后下载文件

本文涉及的产品
对象存储 OSS,OSS 加速器 50 GB 1个月
简介: [前端]每间隔一段时间查询接口获取到百分比,在页面上按照百分比展示进度条,百分比进度后下载文件

诉求

      文件上传到oss,前端每间隔一段时间查询接口获取后端返回的进度,并在页面上按照百分比展示进度条,当达到百分比进度的时候下载文件

技术选型

后端:SpringBoot + Oss + Redis + Swagger3(参考前一篇文章:文件上传oss,并查询上传进度)

前端:JavaScript 实现(使用 JavaScript 定时器(例如 setInterval())每隔一段时间执行一次函数来查询后端接口。在函数中,使用 XMLHttpRequest 或 Fetch API 向后端发起请求,并在响应中获取百分比。然后,使用 JavaScript 将百分比应用到页面上的进度条元素,例如设置进度条元素的 width 属性为百分比。)

前端代码

<!DOCTYPE html>
<html>
<head>
    <title>Progress Bar Example</title>
    <style>
        .progress-container {
            width: 100%;
            height: 20px;
            background-color: #ddd;
            border-radius: 10px;
        }
        .progress-bar {
            width: 0%;
            height: 100%;
            background-color: #4CAF50;
            border-radius: 10px;
            transition: width 0.3s ease-in-out;
        }
    </style>
</head>
<body>
<div class="progress-container">
    <div id="progress-bar" class="progress-bar"></div>
</div>
<script>
    // Get the progress bar element
    const progressBar = document.getElementById('progress-bar');
    // Call the function every 3 seconds
    var interval = setInterval(getProgress, 3000);
  //获取进度
    function getProgress() {
        // Make a GET request to the backend endpoint
        fetch('http://localhost:8080/fileApi/simulateUploadedFile')
            .then(response => response.json())
            .then(data => {
                // Update the progress bar width
                //此处后端返回逻辑需要修改,返回int类型的数值,如后端返回String类型的50%,可能识别不了,%放到前端处理就好了
                progressBar.style.width = `${data.progress}%`;
                //当进度到达100下载文件
                if (data === 100) {
                    clearInterval(interval);
                    downloadFile();
                }
            })
            .catch(error => {
                console.error('Error fetching progress:', error);
            });
    }
  //下载文件
    function downloadFile() {
        // Make a GET request to the backend endpoint to get the OSS URL of the file
        fetch('http://localhost:8080/fileApi/simulateUploadedFile')
            .then(response => response.json())
            .then(data => {
                // Create a link element to trigger the browser to download the file
                var a = document.createElement('a');
                a.href = data.data;
                a.download = 'file.zip';
                a.click();
            })
            .catch(error => {
                console.error('Error fetching file url:', error);
            });
    }
</script>
</body>
</html>

逻辑分析

  1. 访问html时,到达间隔时间请求后端接口拿到进度信息
  2. 拿到进度信息后对进度条的长度进行更新
  3. 当进度条达到100%时,直接下载文件(下载文件这一步前端使用后端返回的oss地址即可)

注意点

文件上传oss,并查询上传进度

      此篇文章中后端所用到的进度查询,以及进度达到100%返回的文件名,需要对上面参考文章的返回结构进行修改

@Data
public class ExportProgress implements Serializable {
    @ApiModelProperty("进度(百分比)")
    private Integer progress;
    @ApiModelProperty("导出内容:oss地址信息")
    private String data;
    @ApiModelProperty("信息,异常时往里面写入")
    private String msg;
    @ApiModelProperty("code信息:约定200为成功code,500为失败code")
    private String code;
}

样例数据

{
  "data": "http://xxx.oss-cn-hangzhou.aliyuncs.com/e1231ae3-54b8-4d25-a847-ef3f0452302c.xlsx",
  "progress": "100%",
  "code":200
}
相关实践学习
对象存储OSS快速上手——如何使用ossbrowser
本实验是对象存储OSS入门级实验。通过本实验,用户可学会如何用对象OSS的插件,进行简单的数据存、查、删等操作。
相关文章
|
6月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
伪类:伪类这个叫法源自于它们跟类相似,但实际上并没有类会附加到标记中的标签上。 伪类分为两种(以及新增的伪类选择器): UI伪类:会在HTML元素处于某种状态时(例如:鼠标指针位于连接上),为该元素应用CSS样式。 :hover 结构化伪类:会在标记中存在某种结构上的关系时 例如: 某元素是一组元素中的第一个或最后一个,为该元素应用CSS样式。 :not和:target(CSS3新增的两个特殊的伪类选择器)
605 2
|
前端开发 安全 开发工具
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
901 90
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
10月前
|
IDE 前端开发 开发工具
用通义灵码IDE做产品高保真原型和前端页面
通义灵码IDE助力高效开发,告别传统Axure原型图的繁琐沟通。通过该工具可直接生成高保真产品原型与前端页面,大幅提升客户确认效率及满意度。现已将相关演示发布至B站(https://www.bilibili.com/video/BV18qT7ziEb7/?vd_source=dc6a6864c895818db6ce4170d50b3557),欢迎体验!用直观操作代替反复说明,让交付更流畅。
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
Dart 前端开发 容器
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
486 18
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
JSON 前端开发 API
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
865 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
|
前端开发
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
461 1
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
1387 14
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
669 0
|
SpringCloudAlibaba JavaScript 前端开发
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架
分布式组件、nacos注册配置中心、openfegin远程调用、网关gateway、ES6脚本语言规范、vue、elementUI
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架

热门文章

最新文章