首页 > 其他分享 >web页面按顺序上传文件,并显示上传进度条

web页面按顺序上传文件,并显示上传进度条

时间:2024-12-13 12:09:16浏览次数:7  
标签:function web currentFileIndex 文件 进度条 var 上传

1. 创建文件输入和上传按钮:

<div id="messages" class="clearfix" />
<input type="file" id="file-input" multiple>
<button id="upload-button">上传文件</button>

 

2. 编写 JavaScript 代码

$(document).ready(function() {
    var filesToUpload = []; // 用于存储文件队列
    var currentFileIndex = 0; // 当前上传文件的索引

    // 监听文件输入框的变化
    $('#file-input').on('change', function(e) {
        var files = e.target.files;
        for (var i = 0; i < files.length; i++) {
            filesToUpload.push(files[i]); // 将文件添加到队列
        }
        // 开始上传第一个文件
        uploadNextFile();
    });

    // 上传按钮事件
    $('#upload-button').on('click', function() {
        if (filesToUpload.length > 0) {
            uploadNextFile(); // 开始上传队列中的第一个文件
        }
    });

    // 上传文件的函数
    function uploadNextFile() {
        if (currentFileIndex < filesToUpload.length) {
            var file = filesToUpload[currentFileIndex];
            var formData = new FormData();
            formData.append('file', file); // 'file' 是后端接收文件的字段名
            
            //添加上传进度条
            showProgress(file.name, currentFileIndex)
            
            //找到当前进度条的元素
            var currentProgressSelector = `[lay-filter='progress${currentFileIndex}']`;
            var progressBar = document.querySelector(currentProgressSelector);
            
            //定时更新进度条, 模拟上传进度, 当前定义每秒进度+10
            var timer = setInterval(function() {
                var currentProgress = progressBar.firstChild.style.width
                //进度条已经在请求结果中改为100%时, 删除定时器
                if (currentProgress == '100%') {
                    clearInterval(timers[`timer_${currentFileIndex}`]);
                } else {
                    n = n + 10;
                    if (n > 95) {
                        n = 95;
                        clearInterval(timers[`timer_${currentFileIndex}`]);
                    }
                    element.progress('progress' + currentFileIndex, n + '%');
                }
            },1000)
            
            $.ajax({
                url: 'upload', // 后台处理文件的接口
                type: 'POST',
                data: formData,
                contentType: false,
                processData: false,
                success: function(response) {
                    //上传成功时,将进度条置为100%
                    element.progress("progress" + currentFileIndex, "100%");
                    element.render('progress');
                    console.log('文件上传成功:', response);
                    currentFileIndex++; // 移动到下一个文件
                    uploadNextFile(); // 继续上传下一个文件
                },
                error: function() {
                    console.log('文件上传失败');
                    currentFileIndex++; // 即使失败也移动到下一个文件
                    uploadNextFile(); // 继续上传下一个文件
                }
            });
        } else {
            console.log('所有文件已上传完毕');
            // 可以在这里执行上传完毕后的操作,比如通知用户
        }
    }
    
    //显示进度条
    function showProgress(fileName, i) {
        var msg = "<div class='progressbar'><div class='progressname'>" + fileName + "</div><div class='layui-progress layui-progress-big'  lay-filter='progress" + i + "'  lay-showpercent='true'><div class='layui-progress-bar' lay-percent='100%'></div></div></div>";
        $("#messages").append(msg);
    }
});

 

标签:function,web,currentFileIndex,文件,进度条,var,上传
From: https://www.cnblogs.com/along007/p/18604652

相关文章

  • 网络通信与状态管理:深入理解Cookie、Session及Web工具
    前言:在当今数字化的网络世界中,Web技术的基石构建起了我们丰富多彩的互联网体验。其中,Cookie和Session犹如隐匿于幕后的关键使者,默默地在客户端与服务器之间传递着信息,管理着用户的状态与交互数据,深刻影响着我们在各类网站与应用中的每一次操作与交互流程。与此同时,Links、Wge......
  • 为什么在生成静态页或上传附件时出现“Maximum execution time of 30 seconds exceede
    在使用易优EyouCms生成静态页或上传附件时,如果遇到“Maximumexecutiontimeof30secondsexceeded”的错误提示,这通常是因为服务器上的PHP脚本执行时间超过了默认的最大执行时间限制。默认情况下,PHP的 max_execution_time 设置为30秒,这意味着如果脚本执行时间超过30秒,将会被......
  • JMeter如何对文件上传功能进行测试
    一、使用背景1、在网页中发布的内容,需要添加文件一起发布或上传2、在创建Jmeter脚本之前,首先获取文件上传/下载接口需求(接口文档)或者通过抓包的方式来获取,明确请求链接、请求方法、请求头、请求体、返回数据等信息。二、操作步骤1、获取接口信息使用Fiddler和badboy来配合抓......
  • 【.Net动态Web API】参数验证异常返回
    ​......
  • 需要从前端上传一个大文件(如500M)到服务器,你是如何考虑的?
    前端上传大文件(例如500M)到服务器需要考虑以下几个方面:1.切片上传:核心思想:将大文件切割成多个小块,分别上传,最后在服务器端合并。优点:避免一次性上传大文件造成的网络中断或服务器超时等问题,提升上传成功率和用户体验。支持断点续传,即使网络中断,也能从中断处继续上传。......
  • 应急响应-web3
    应急响应-web3声明!学习靶机来自​知攻善防实验室****公众号,有兴趣的师傅可以关注一下,如涉及侵权马上删除文章笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人无关,切勿触碰法律底线,否则后果自负!!!!‍准备环境靶机下载地址:https://pan.......
  • jspssm基于javaweb的中药中草药商城 供求信息管理系统
    目录项目介绍具体实现截图开发核心技术:核心代码部分展示详细视频演示源码获取方式项目介绍整个中草药信息管理系统为了便于用户购买、管理员管理,采用了以下几大功能管理模块,包括管理员与用户、供应商的设计:用户用户只能做一些简单的操作,看看首页的中草药信息,以......
  • 【网络安全零基础入门到精通教程】Web渗透信息收集之域名、端口、服务、指纹、旁站、C
    声明:本人坚决反对利用教学方法进行恶意攻击的行为,一切错误的行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解技术背后的原理,更好地进行安全防护。文章目录一.Web渗透第一步二.域名信息收集1.域名查询2.Whois查询3.备案信息查询三.Web站点信息收集1.CMS指纹......
  • 知攻善防应急响应靶场练习-web1
    题目描述前景需要:小李在值守的过程中,发现有[CPU](https://so.csdn.net/so/search?q=CPU&spm=1001.2101.3001.7020)占用飙升,出于胆子小,就立刻将服务器关机,这是他的服务器系统,请你找出以下内容,并作为通关条件:1.攻击者的shell密码2.攻击者的IP地址3.攻击者的隐藏账户名称4.攻......
  • obsidian+picgo+chevereto+picgo图床 笔记文档图片自动上传
    简介obsidian,一款知识管理工具,它支持Markdown格式,所有你的思维、笔记和灵感都能在一个地方相互连接,形成一个井然有序的知识网络。用obsidian编辑文本,图片保存本地很大,我们上传到图床,减小文件大小方便不同工具打开使用文本,减小文本空间。文档方传送迁移。obsidian安装登陆官......