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

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 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搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
相关文章
|
11天前
|
前端开发
化学元素周期表1.0Vue前端页面版本
化学元素周期表1.0Vue前端页面版本
|
11天前
|
前端开发 开发工具 数据库
支付系统资料-青戈版沙箱支付,订单编号样式设计,还有七天无理由退款,常与会员系统相搭配,内网穿透客户看到页面,前端展示,直播过程所有都能访问的写法
支付系统资料-青戈版沙箱支付,订单编号样式设计,还有七天无理由退款,常与会员系统相搭配,内网穿透客户看到页面,前端展示,直播过程所有都能访问的写法
支付系统资料-青戈版沙箱支付,订单编号样式设计,还有七天无理由退款,常与会员系统相搭配,内网穿透客户看到页面,前端展示,直播过程所有都能访问的写法
|
13天前
|
前端开发 JavaScript
前端 JS 经典:下载的流式传输
前端 JS 经典:下载的流式传输
11 1
|
3天前
|
前端开发 JavaScript PHP
技术心得:前端点击按钮,导入excel文件,上传到后台,excel接收和更新数据
技术心得:前端点击按钮,导入excel文件,上传到后台,excel接收和更新数据
|
4天前
|
前端开发 JavaScript Java
【vue】 前端 基于 vue-simple-uploader 实现大文件断点续传和分片上传
【vue】 前端 基于 vue-simple-uploader 实现大文件断点续传和分片上传
13 0
|
10天前
|
前端开发 NoSQL JavaScript
若依修改---重新部署项目注意事项,新文件初始化需要修改的地方,打包后的文件很难进行修改,如果想要不断修改项目,注意保存原项目,才可以不断修改,前端:在Vue.config.js文件中修改target
若依修改---重新部署项目注意事项,新文件初始化需要修改的地方,打包后的文件很难进行修改,如果想要不断修改项目,注意保存原项目,才可以不断修改,前端:在Vue.config.js文件中修改target
|
10天前
|
前端开发 JavaScript Linux
若依修改之后,无法访问前端项目如何解决,只能访问后端的接口,我的接口8083,端不显示咋解决?在vue.config.js文件中的映射路径要跟后端匹配,到软件商店里找到Ngnix配置代理,设80不用加
若依修改之后,无法访问前端项目如何解决,只能访问后端的接口,我的接口8083,端不显示咋解决?在vue.config.js文件中的映射路径要跟后端匹配,到软件商店里找到Ngnix配置代理,设80不用加
|
10天前
|
JavaScript 前端开发 网络架构
文本,展现到文章的面前,Vue结合v-for实现传参的方法,好的资料,Vue实现动态绑定,数据放到前端页面上
文本,展现到文章的面前,Vue结合v-for实现传参的方法,好的资料,Vue实现动态绑定,数据放到前端页面上
|
10天前
|
前端开发
支付系统--微信支付21--搭建前端环境,payment-demo-front这个项目文件夹是前端显示文件,payment-demo是后端项目,支付页面常见三个页面:购买课程,我的订单,下载账单
支付系统--微信支付21--搭建前端环境,payment-demo-front这个项目文件夹是前端显示文件,payment-demo是后端项目,支付页面常见三个页面:购买课程,我的订单,下载账单
|
13天前
|
前端开发 JavaScript
前端 JS 经典:大文件分片
前端 JS 经典:大文件分片
11 0