当前位置: 首页 > article >正文

银行局域网如何通过WebUploader优化视频监控超大附件的断点校验与传输日志插件?

前端老炮的20G文件夹上传大冒险附部分代码各位前端同仁们我是老张一个在辽宁苦哈哈写代码的前端民工。最近接了个活客户要求用原生JS实现20G文件夹上传下载还要支持IE9这简直是要了我这把老骨头的命啊不过为了那100块预算划掉为了技术理想我决定拼了项目背景哭诉版客户要求20G大文件上传这是要上传整个硬盘吗文件夹上传保留层级结构1000个分类的文件这是要搞文件管理系统吗支持SM4/AES加密这是要搞国家机密吗断点续传用户重启电脑都不能丢进度这是要我做操作系统吗兼容IE9现在还有人用IE9哦是Windows 7用户好吧我理解预算100元以内这连买杯咖啡都不够啊7*24小时技术支持这是要把我当24小时客服吗3年免费维护这是要签终身合同吗技术选型妥协版经过深思熟虑我决定前端Vue3 原生JS因为客户说不能用WebUploader后端SpringBoot但我不写后端代码哈哈加密crypto-js因为IE9不支持Web Crypto API文件分片自己实现因为找不到现成的IE9兼容方案部分前端代码救命版以下是文件夹上传的核心代码其他功能你们自己实现吧逃20G文件夹上传神器IE9兼容版 body { font-family: Microsoft YaHei, sans-serif; margin: 20px; } .progress-container { width: 100%; background: #f0f0f0; margin: 10px 0; } .progress-bar { height: 20px; background: #4CAF50; width: 0%; text-align: center; line-height: 20px; color: white; } .file-list { margin-top: 20px; border: 1px solid #ddd; padding: 10px; max-height: 300px; overflow-y: auto; } 20G文件夹上传神器IE9兼容版 选择文件夹 开始上传 暂停上传 0% 文件列表 // 全局变量IE9兼容的类实现 var FileUploader { files: [], chunkSize: 5 * 1024 * 1024, // 5MB分片 uploadId: null, paused: false, // 初始化IE9兼容版 init: function() { document.getElementById(fileInput).addEventListener(change, this.handleFileSelect.bind(this)); // 模拟断点续传的本地存储IE9用userData或cookie这里简化用localStorage if (!localStorage.getItem(uploadProgress)) { localStorage.setItem(uploadProgress, JSON.stringify({})); } }, // 处理文件夹选择IE9兼容版 handleFileSelect: function(e) { this.files []; var fileList e.target.files; // 递归构建文件树IE9没有File.webkitRelativePath需要特殊处理 for (var i 0; i fileList.length; i) { var file fileList[i]; // 这里简化处理实际需要解析webkitRelativePath或手动构建路径 // 兼容IE9的替代方案让用户先压缩成zip...开玩笑的 this.files.push({ file: file, path: file.name, // 实际应该用webkitRelativePath uploaded: 0, total: file.size, chunks: Math.ceil(file.size / this.chunkSize), uploadedChunks: 0 }); } this.renderFileList(); }, // 渲染文件列表IE9兼容版 renderFileList: function() { var list document.getElementById(fileList); list.innerHTML ; for (var i 0; i this.files.length; i) { var file this.files[i]; var item document.createElement(li); item.innerHTML file.path ( this.formatFileSize(file.uploaded) / this.formatFileSize(file.total) ); list.appendChild(item); } }, // 格式化文件大小IE9兼容版 formatFileSize: function(bytes) { if (bytes 0) return 0 Bytes; var k 1024; var sizes [Bytes, KB, MB, GB]; var i Math.floor(Math.log(bytes) / Math.log(k)); return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) sizes[i]; }, // 开始上传IE9兼容版 startUpload: function() { if (this.files.length 0) { alert(请先选择文件夹); return; } this.paused false; this.uploadId new Date().getTime(); // 简单生成上传ID // 加载之前的上传进度 var progressData JSON.parse(localStorage.getItem(uploadProgress)); for (var i 0; i this.files.length; i) { var file this.files[i]; var fileId file.path; // 实际应该用更唯一的ID // 如果有之前的上传记录从断点继续 if (progressData[fileId] progressData[fileId].uploadId this.uploadId) { file.uploaded progressData[fileId].uploaded; file.uploadedChunks progressData[fileId].uploadedChunks; } else { progressData[fileId] { uploadId: this.uploadId, uploaded: 0, uploadedChunks: 0 }; } } localStorage.setItem(uploadProgress, JSON.stringify(progressData)); this.uploadNextChunk(); }, // 上传下一个分片IE9兼容版 uploadNextChunk: function() { if (this.paused) return; var fileToUpload null; var fileIndex -1; // 查找下一个需要上传的分片 for (var i 0; i this.files.length; i) { var file this.files[i]; if (file.uploadedChunks file.chunks) { fileToUpload file; fileIndex i; break; } } if (!fileToUpload) { alert(上传完成); return; } var chunkIndex fileToUpload.uploadedChunks; var start chunkIndex * this.chunkSize; var end Math.min(start this.chunkSize, fileToUpload.total); var chunk fileToUpload.file.slice(start, end); // 加密分片IE9兼容版 var encryptedChunk this.encryptData(chunk, secret-key-123); // 实际应该用用户提供的密钥 // 模拟上传实际应该用XMLHttpRequest或ActiveXObject for IE9 console.log(上传分片:, fileToUpload.path, 分片, chunkIndex, /, fileToUpload.chunks); // 更新进度IE9兼容版 fileToUpload.uploadedChunks; fileToUpload.uploaded end; // 保存上传进度 var progressData JSON.parse(localStorage.getItem(uploadProgress)); var fileId fileToUpload.path; progressData[fileId] { uploadId: this.uploadId, uploaded: fileToUpload.uploaded, uploadedChunks: fileToUpload.uploadedChunks }; localStorage.setItem(uploadProgress, JSON.stringify(progressData)); // 更新UI this.renderFileList(); this.updateProgressBar(); // 继续上传下一个分片使用setTimeout模拟异步 var self this; setTimeout(function() { self.uploadNextChunk(); }, 100); // 模拟网络延迟 }, // 加密数据IE9兼容版 encryptData: function(data, key) { // 实际应该用SM4或AES这里简化用CryptoJS的AES // IE9需要额外处理ArrayBuffer到WordArray的转换 if (data instanceof Blob) { return new Promise(function(resolve) { var reader new FileReader(); reader.onload function(e) { var words CryptoJS.enc.Latin1.parse(e.target.result); var encrypted CryptoJS.AES.encrypt(words, key).toString(); resolve(encrypted); }; reader.readAsBinaryString(data); }); } // 简化处理实际需要更复杂的实现 return CryptoJS.AES.encrypt(data, key).toString(); }, // 暂停上传IE9兼容版 pauseUpload: function() { this.paused true; alert(上传已暂停); }, // 更新进度条IE9兼容版 updateProgressBar: function() { var totalUploaded this.files.reduce(function(sum, file) { return sum file.uploaded; }, 0); var totalSize this.files.reduce(function(sum, file) { return sum file.total; }, 0); var percent Math.round((totalUploaded / totalSize) * 100); document.getElementById(progressBar).style.width percent %; document.getElementById(progressBar).innerHTML percent %; } }; // 初始化页面加载时执行 window.onload function() { FileUploader.init(); // 兼容IE9的console.logIE9没有console对象时 if (!window.console) { window.console { log: function() {} }; } }; // 暴露全局方法IE9兼容 window.startUpload function() { FileUploader.startUpload(); }; window.pauseUpload function() { FileUploader.pauseUpload(); };开发心得吐槽版IE9兼容性这简直是一场噩梦没有File API没有Promise没有const/let没有箭头函数…我感觉自己在用石器时代的工具开发火箭。文件夹上传现代浏览器有webkitRelativePath但IE9没有。解决方案要么让用户先压缩成zip要么…算了还是压缩吧客户肯定不同意。断点续传localStorage在IE9中只有5MB限制存储大量上传进度呵呵祝你好运。加密传输IE9不支持Web Crypto API只能用crypto-js这种老库性能感人。20G文件分片上传是必须的但IE9的内存管理…算了别让浏览器崩溃就是胜利。加入我们的接单群广告版各位同仁如果你也在为这些奇葩需求头疼或者想找项目合作欢迎加入我们的QQ群374992201群内福利1~99元超级大红包每天都有接单合作机会技术交流分享推荐项目拿20%提成超级会员50%提成躺着赚钱免责声明求生版以上代码仅供娱乐参考实际项目中请使用成熟的库如WebUploader、Plupload等考虑使用Flash作为IE9的备选方案对于20G文件建议使用专业的大文件传输方案加密传输请使用标准协议如TLS而非前端加密断点续传最好由后端实现最后祝大家项目顺利少遇奇葩需求如果真有客户找上门记得推荐给我啊手动狗头将组件复制到项目中示例中已经包含此目录引入组件配置接口地址接口地址分别对应文件初始化文件数据上传文件进度文件上传完毕文件删除文件夹初始化文件夹删除文件列表参考http://www.ncmem.com/doc/view.aspx?ide1f49f3e1d4742e19135e00bd41fa3de处理事件启动测试启动成功效果数据库效果预览文件上传文件刷新续传支持离线保存文件进度在关闭浏览器刷新浏览器后进行不丢失仍然能够继续上传文件夹上传支持上传文件夹并保留层级结构同样支持进度信息离线保存刷新页面关闭页面重启系统不丢失上传进度。下载示例点击下载完整示例

相关文章:

银行局域网如何通过WebUploader优化视频监控超大附件的断点校验与传输日志插件?

前端老炮的20G文件夹上传大冒险(附部分代码) 各位前端同仁们,我是老张,一个在辽宁苦哈哈写代码的"前端民工"。最近接了个活,客户要求用原生JS实现20G文件夹上传下载,还要支持IE9!这简…...

抖音批量下载终极指南:3分钟搞定无水印视频采集,告别手动烦恼

抖音批量下载终极指南:3分钟搞定无水印视频采集,告别手动烦恼 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and brow…...

Raspberry Pi RP2350 A4步进版本解析与安全增强

1. Raspberry Pi RP2350 A4步进版本深度解析作为一名长期跟踪Raspberry Pi硬件发展的嵌入式开发者,我最近详细研究了RP2350微控制器的A4步进版本更新。这次迭代不仅修复了关键硬件缺陷,还引入了多项安全增强特性,对于嵌入式系统开发者而言意义…...

AI优化电动汽车充电:PSO算法与GPU加速实践

1. 电动汽车充电优化的AI革命:从理论到实践作为一名长期关注能源与AI交叉领域的技术从业者,我最近被加拿大皇家军事学院(RMC)团队的研究成果所震撼。他们开发的这套基于粒子群优化(PSO)算法的实时充电调度系统,完美诠释了如何用AI技术解决电动…...

Qianfan-OCR科研提效:数学教材截图→公式LaTeX+概念解释文本同步生成

Qianfan-OCR科研提效:数学教材截图→公式LaTeX概念解释文本同步生成 1. 工具简介 Qianfan-OCR是一款基于百度千帆InternVL架构开发的单卡GPU专属文档解析工具。它完美解决了科研人员在处理数学教材、论文等复杂文档时的痛点问题——传统OCR工具无法准确识别数学公…...

Qwen3-4B-Thinking部署实战:Ubuntu/CentOS下vLLM环境一键初始化脚本

Qwen3-4B-Thinking部署实战:Ubuntu/CentOS下vLLM环境一键初始化脚本 1. 模型简介 Qwen3-4B-Thinking-2507-Gemini-2.5-Flash-Distill是一个基于vLLM框架部署的文本生成模型,该模型在约5440万个由Gemini 2.5 Flash生成的token上进行了训练。模型的主要目…...

CVRPTW问题的高效图粗化解法与实践

1. 带时间窗车辆路径问题的图粗化解法解析在物流配送和运输调度领域,带时间窗的容量约束车辆路径问题(CVRPTW)一直是个令人头疼的难题。想象一下,你管理着一个大型配送中心,每天需要安排数十辆货车为数百个客户送货。每…...

造相-Z-Image-Turbo亚洲美女LoRA应用:打造你的虚拟偶像素材库

造相-Z-Image-Turbo亚洲美女LoRA应用:打造你的虚拟偶像素材库 如果你正在为游戏、动漫、虚拟主播或者品牌营销寻找高质量的亚洲女性角色素材,那么今天介绍的这套工具组合,可能会成为你的“生产力神器”。 它由两部分组成:一个是…...

Hypnos-i1-8B生产环境:科研团队部署8B模型做论文公式推导辅助

Hypnos-i1-8B生产环境:科研团队部署8B模型做论文公式推导辅助 1. 项目背景与价值 Hypnos-i1-8B是一款专注于强推理能力和数学解题的8B级开源大模型,特别适合科研场景下的复杂逻辑推理和公式推导任务。这个模型基于NousResearch/Hermes-3-Llama-3.1-8B微…...

Python数据分析Pandas实战技巧

Python数据分析Pandas实战技巧 在当今数据驱动的时代,Python凭借其强大的数据分析库Pandas,成为数据科学领域的核心工具之一。Pandas以其高效的数据结构和灵活的操作方式,帮助用户轻松完成数据清洗、转换和分析任务。无论是处理金融数据、用…...

AutoSubs:本地AI字幕生成工具,让视频制作效率提升3倍

AutoSubs:本地AI字幕生成工具,让视频制作效率提升3倍 【免费下载链接】auto-subs Instantly generate AI-powered subtitles on your device. Works standalone or connects to DaVinci Resolve. 项目地址: https://gitcode.com/gh_mirrors/au/auto-su…...

告别手动对照:用Python脚本自动解析RINEX 3.04导航电文(附GitHub代码)

从手动解析到自动化处理:Python实战RINEX 3.04导航电文解析工具 在GNSS数据处理领域,RINEX格式的导航电文解析是每个工程师和研究者都无法绕开的基础工作。传统的手动解析方式不仅效率低下,还容易因人为疏忽导致错误。本文将带你用Python构建…...

WorkshopDL终极指南:三步免费下载Steam创意工坊模组,跨平台玩家的福音

WorkshopDL终极指南:三步免费下载Steam创意工坊模组,跨平台玩家的福音 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在Epic Games Store或GOG平…...

为什么顶尖团队2026 Q1全部切换到Blazor Serverless模式:Server-Side无状态化改造的7步避坑清单

第一章:Blazor Serverless模式的演进逻辑与2026产业共识Blazor Serverless并非简单地将Blazor WebAssembly部署至函数计算平台,而是重构了UI生命周期、状态托管与服务编排的范式边界。其演进根植于三大技术张力:前端组件化与后端无状态化的收…...

Linux网络编程- 深入解析recvfrom()与sendto()的实战应用

1. 初识recvfrom()与sendto():UDP通信的基石 在网络编程的世界里,TCP和UDP就像两个性格迥异的兄弟。TCP像是个严谨的管家,事无巨细都要确认;而UDP则像个随性的邮差,把信件往信箱一扔就完事。今天我们要聊的recvfrom()和…...

PowerMill宏编程避坑指南:从‘中文乱码’到‘变量作用域’,新手常踩的5个坑及解决方法

PowerMill宏编程避坑指南:从"中文乱码"到"变量作用域",新手常踩的5个坑及解决方法 在PowerMill二次开发的道路上,宏编程是每个工程师必须掌握的技能。但当你满怀热情地写下第一行代码,却遭遇莫名其妙的报错时…...

告别盲调!用CubeMX图形化配置STM32F4时钟树,并自动生成HAL代码

图形化配置STM32F4时钟树的实战指南:从CubeMX到代码生成 第一次接触STM32的时钟树配置时,我盯着参考手册里密密麻麻的时钟路径图和一堆分频系数发愣。作为从51单片机转过来的开发者,这种复杂度让我一度想放弃HAL库。直到发现了CubeMX这个神器…...

机器学习数据预处理:Box-Cox与Yeo-Johnson变换详解

1. 机器学习中的幂变换技术解析在机器学习实践中,数据预处理是决定模型性能的关键环节之一。许多传统算法如线性回归和高斯朴素贝叶斯都假设输入数据服从高斯分布,但现实数据往往偏离这一假设。本文将深入探讨两种强大的数据变换技术——Box-Cox变换和Ye…...

铂力特金属3D打印技术又一突破,三大关键点解读

在TCT亚洲展的铂力特展台,有一幕让笔者印象特别深刻,讲解人员中途突然折返到一版零件前,特意对它进行介绍,足以看出这些零件具有非同寻常的价值。它所代表的,就是铂力特的高精度3D打印解决方案。这版产品是铂力特为华力…...

ASRPRO开发实战:从环境搭建到多任务调试的避坑指南

1. ASRPRO开发板开箱与环境搭建 第一次拿到ASRPRO开发板时,我像大多数嵌入式开发者一样既兴奋又忐忑。这块搭载240MHz主频、640KB SRAM和2-4MB Flash的芯片,在物联网语音交互领域有着不俗的表现。但真正开始开发前,有几个关键准备步骤需要特别…...

PET成像运动校正技术CrowN@22解析与应用

1. PET成像中的运动校正挑战与CrowN22技术概述在神经退行性疾病早期诊断领域,正电子发射断层扫描(PET)技术正面临一个关键瓶颈:长达10-20分钟的脑部扫描过程中,患者不可避免的头部运动会导致图像质量显著下降。传统解决方案如呼吸门控技术对脑…...

模糊逻辑与神经网络在PMSM控制中的协同优化

1. 模糊逻辑与神经网络在PMSM控制中的协同机制永磁同步电机(PMSM)作为高精度驱动系统的核心部件,其速度控制性能直接影响电动汽车、工业机器人等关键设备的动态响应。传统PID控制在面对参数变化和外部扰动时表现乏力,而滑模控制(SMC)虽具有强鲁棒性&…...

别再手动算了!用这个在线工具5分钟搞定透明度与十六进制颜色转换

设计师必备:5款高效透明度与十六进制颜色转换工具实战指南 在数字设计领域,颜色处理是日常工作中最频繁的操作之一。无论是网页设计、移动应用界面还是品牌视觉系统,精确控制颜色透明度往往能带来更丰富的视觉层次和用户体验。但每次需要调整…...

图像识别技术优化

图像识别技术优化:开启智能视觉新时代 在人工智能飞速发展的今天,图像识别技术已成为推动社会智能化的重要引擎。从安防监控到医疗诊断,从自动驾驶到工业质检,图像识别的应用场景不断扩展。面对复杂多变的现实环境,如…...

Unity3D游戏一键封装:使用Inno Setup打造专业Windows安装包

1. 为什么Unity游戏需要专业安装包? 当你用Unity3D开发完游戏并导出Windows版本时,会发现生成的文件结构相当混乱——一个.exe主程序、Data文件夹、MonoBleedingEdge运行时文件、各种DLL散落在目录里。这种原始输出方式存在三个致命问题: 首先…...

代价敏感SVM解决不平衡分类问题实战

1. 不平衡分类问题的现实挑战在真实世界的数据分析场景中,我们经常会遇到类别分布严重不均衡的情况。比如在金融欺诈检测中,正常交易可能占99.9%,而欺诈交易仅占0.1%;在医疗诊断中,健康样本往往远多于患病样本。这种类…...

【气动学】基于matlab蒙特卡洛模拟ISA模型分析火箭飞行动力学和随机大气条件下的撞击扩散【含Matlab源码 15368期】

💥💥💥💥💥💥💞💞💞💞💞💞💞💞欢迎来到海神之光博客之家💞💞💞&#x1f49…...

Spring Boot 自动装配条件匹配机制

Spring Boot自动装配条件匹配机制揭秘 Spring Boot的自动装配是其核心特性之一,能够根据应用环境动态加载所需的Bean,而这一过程的核心便是条件匹配机制。通过条件注解(如Conditional),Spring Boot可以智能判断是否满…...

量子纠错与表面码在QCCD架构中的实现与优化

1. 量子纠错与表面码基础解析量子计算的核心挑战在于量子比特的脆弱性——环境噪声会导致量子态退相干,使得计算过程不可靠。量子纠错(QEC)技术通过将逻辑量子比特编码在多个物理量子比特上,实现了对错误的检测和纠正。表面码&…...

别再只会用正则了!JMeter边界提取器(Boundary Extractor)实战:5分钟搞定商品列表名称抓取

别再只会用正则了!JMeter边界提取器实战:5分钟搞定商品列表名称抓取 第一次用JMeter测试电商API时,我被正则表达式折磨得够呛——明明只是想提取商品名称,却要写一堆晦涩的符号。直到发现边界提取器(Boundary Extracto…...