能源企业局域网如何用Java保障无人机视频文件夹分片上传的完整性校验?
我一个被大文件上传“折磨”到想秃头的PHP程序员想和你唠唠这事儿最近接了个外包项目客户是做本地档案馆数字化的老板拍着桌子说“小老弟咱们这系统得支持20G文件夹上传用户每天传几千份资料都是带1000个分类的文件夹你得给我整明白——文件夹层级不能乱断网重启能续传加密存储还便宜”得需求明确了原生JS实现别整框架、20G文件夹上传保留层级、IE8兼容、加密传输存储、断点续传、PHP后端、预算100元内。我熬了三个大夜翻遍了GitHub和百度终于整出一套“能跑能扛”的方案——今天全掏给你省得你再踩坑一、需求拆解这活儿到底难在哪儿先理清楚客户的“刚需”咱们一条条啃需求维度关键点难点吐槽文件夹上传保留层级1000个分类、非打包下载开源组件如WebUploader停更不支持IE8文件夹层级全靠手动模拟头都大了大文件传输20G文件、断点续传关浏览器/重启电脑不丢进度IE8不支持FormData分片上传得用XMLHttpRequest.sendAsBinary内存容易爆加密合规传输HTTPS存储SM4/AES可配置客户要国密SM4PHP的SM4扩展得自己编译AES密钥管理不能硬编码得存配置文件兼容性IE8、主流浏览器、Windows/Linux/macOSIE8的File对象兼容性差localStorage容量只有5MB得省着用成本预算100元内、免费代码文档、7*24小时支持网上代码全是“残次品”找个能跑的文件夹上传示例比登天还难外包报价高自己搞更划算二、技术方案用“土办法”解决“高难度”1. 架构设计前端“土分片” 后端“土存储”没啥高大上的架构就用最朴素的方式前端把文件夹拆成“文件相对路径”分片上传后端存分片记录路径合并时按路径拼。核心逻辑文件夹上传用户选文件夹IE8手动输入路径前端递归遍历文件记录每个文件的“相对路径”如/文档/报告/2024.docx。分片上传每个文件切5MB分片IE8内存扛不住太大的片上传时带“文件哈希分片索引”服务端存分片到临时目录。断点续传用localStorage存已上传分片索引IE8支持上传前查进度跳过已传的分片。加密存储传输层强制HTTPS存储层用AES加密SM4需要PHP扩展客户预算有限先上AES密钥存config.php。非打包下载下载时按路径遍历文件逐个输出避免打包导致内存爆炸。三、前端代码原生JS搞定文件夹上传兼容IE81. 文件夹上传核心逻辑HTMLJS大文件上传兼容IE8 上传文件夹保留层级 开始上传 进度0% // 兼容IE8的工具函数ES5语法 var utils { // 生成唯一文件IDMD5IE8需引入crypto-js getFileId: function(file) { var reader new FileReader(); reader.onload function(e) { var wordArray CryptoJS.lib.WordArray.create(e.target.result); return CryptoJS.MD5(wordArray).toString(); }; reader.readAsArrayBuffer(file); // IE8用readAsBinaryString需特殊处理 }, // 遍历文件夹递归记录相对路径 traverseFolder: function(files, basePath, callback) { for (var i 0; i files.length; i) { var file files[i]; var relativePath basePath ? basePath / file.name : file.name; if (file.webkitRelativePath) { // 现代浏览器直接获取相对路径 callback(file, relativePath); } else { // IE8手动输入路径弹窗提示 var path prompt(请输入 file.name 的相对路径如文档/报告/, basePath); callback(file, path); } // 递归处理子文件夹假设用户选了嵌套文件 if (file.files) { this.traverseFolder(file.files, relativePath, callback); } } }, // 分片上传兼容IE8的XMLHttpRequest uploadChunk: function(url, chunk, fileId, chunkIndex, totalChunks, callback) { var xhr new XMLHttpRequest(); xhr.open(POST, url, true); xhr.setRequestHeader(Content-Type, application/octet-stream); xhr.setRequestHeader(X-File-Id, fileId); xhr.setRequestHeader(X-Chunk-Index, chunkIndex); xhr.setRequestHeader(X-Total-Chunks, totalChunks); xhr.onreadystatechange function() { if (xhr.readyState 4 xhr.status 200) { callback(JSON.parse(xhr.responseText)); } }; xhr.send(chunk); // IE8用sendAsBinary需处理Blob } }; // 上传文件夹主逻辑 function uploadFolder() { var input document.getElementById(fileInput); var files input.files; if (files.length 0) { alert(请选择文件夹); return; } // 生成全局唯一文件ID防重复 var fileId utils.getFileId(files[0]); // 简单示例实际需遍历所有文件 var uploadedChunks JSON.parse(localStorage.getItem(fileId)) || []; // 从localStorage读进度 // 遍历文件记录相对路径现代浏览器自动处理IE8弹窗 utils.traverseFolder(files, , function(file, relativePath) { // 计算分片 var chunkSize 5 * 1024 * 1024; // 5MB/片 var totalChunks Math.ceil(file.size / chunkSize); var currentChunk 0; // 上传分片跳过已传的 function uploadNextChunk() { if (currentChunk totalChunks) { alert(文件上传完成); return; } if (uploadedChunks.indexOf(currentChunk) ! -1) { currentChunk; uploadNextChunk(); return; } var start currentChunk * chunkSize; var end Math.min(start chunkSize, file.size); var chunk file.slice(start, end); // IE8用webkitSlice // 上传分片 utils.uploadChunk( /api/upload/chunk, chunk, fileId, currentChunk, totalChunks, function(res) { if (res.code 200) { uploadedChunks.push(currentChunk); localStorage.setItem(fileId, JSON.stringify(uploadedChunks)); // 保存进度 currentChunk; uploadNextChunk(); } else { alert(上传失败 res.msg); } } ); } uploadNextChunk(); }); }2. 下载功能非打包按路径输出// 下载按钮点击事件需后端配合functiondownloadFolder(folderId){window.open(/api/download/folder?folderIdfolderId);// 后端按路径遍历输出文件}四、后端PHP代码分片上传加密存储文件夹管理1. 分片上传接口处理上传请求200,msg分片上传成功]);?2. 合并分片接口生成最终文件200,msg文件合并成功,path$mergedFile]);?// AES加密函数需安装openssl扩展functionaes_encrypt($data,$key){$ivopenssl_random_pseudo_bytes(16);$encryptedopenssl_encrypt($data,AES-256-CBC,$key,0,$iv);returnbase64_encode($iv.$encrypted);// 存储IV密文}?3. 文件夹下载接口非打包输出五、数据库设计MySQL存文件夹层级和文件元数据预算有限用单表CREATETABLEfiles(idINTPRIMARYKEYAUTO_INCREMENT,folder_idVARCHAR(255)NOTNULLCOMMENT文件夹ID对应前端生成的fileId,file_nameVARCHAR(255)NOTNULLCOMMENT文件名,relative_pathVARCHAR(500)NOTNULLCOMMENT相对路径如文档/报告/,file_sizeBIGINTNOTNULLCOMMENT文件大小字节,encrypt_keyVARCHAR(32)NOTNULLCOMMENTAES密钥16/24/32字节,create_timeTIMESTAMPDEFAULTCURRENT_TIMESTAMPCOMMENT上传时间);六、兼容性与稳定性保障1. IE8兼容用XMLHttpRequest.sendAsBinary上传分片IE8不支持FormData。localStorage存已上传分片索引容量5MB足够存1000个分片索引。用prompt手动输入路径IE8不支持webkitdirectory。2. 断点续传前端上传前查localStorage跳过已传分片。服务端用文件记录已上传分片uploaded.txt重启后不丢失。3. 加密存储传输层强制HTTPS买个便宜的SSL证书一年几十块。存储层用AES-256-CBC密钥存config.php定期更换。七、预算与支持成本代码免费服务器用阿里云轻量应用服务器1核2G一年500块SSL证书一年50块总预算控制在600块内远低于100元不用户说预算100元内可能我超了但实际可以优化比如用免费SSL证书服务器用共享主机。支持提供7*24小时QQ群支持群号374992201群里有大神帮忙调试。文档附《部署指南》《常见问题排查》直接交给客户用。写在最后这活儿咱们能搞定从需求分析到代码落地从兼容性调试到加密合规我踩过IE8的坑、分片的坑、文件夹层级的坑现在把这套“能跑能扛”的方案掏出来——你直接拿去用改改配置就能上线要是你也遇到类似需求或者想组队接单欢迎加群QQ群374992201。群里有大神分享资源有项目一起合作没项目一起吹牛——毕竟程序员的日子互相搭把手才能走得更远最后小声说要是群里有人能搞出SM4加密的PHP扩展我分他一半项目钱导入项目导入到Eclipse点南查看教程导入到IDEA点击查看教程springboot统一配置点击查看教程工程NOSQLNOSQL示例不需要任何配置可以直接访问测试创建数据表选择对应的数据表脚本这里以SQL为例修改数据库连接信息访问页面进行测试文件存储路径up6/upload/年/月/日/guid/filename效果预览文件上传文件刷新续传支持离线保存文件进度在关闭浏览器刷新浏览器后进行不丢失仍然能够继续上传文件夹上传支持上传文件夹并保留层级结构同样支持进度信息离线保存刷新页面关闭页面重启系统不丢失上传进度。下载示例点击下载完整示例

相关新闻

计算机毕业设计hadoop+spark知识图谱中药推荐系统 中药数据分析可视化大屏 中药爬虫 机器学习 中药预测系统 中药情感分析 大数据毕业设计

计算机毕业设计hadoop+spark知识图谱中药推荐系统 中药数据分析可视化大屏 中药爬虫 机器学习 中药预测系统 中药情感分析 大数据毕业设计

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 技术范围:Sprin…

2026/7/7 16:46:46 阅读更多 →
恒压供水(无负压供水)系统:西门子 S7 - 200smart PLC 与触摸屏的完美结合

恒压供水(无负压供水)系统:西门子 S7 - 200smart PLC 与触摸屏的完美结合

恒压供水(无负压供水)全套图纸程序 西门子s7-200smart PLC 西门子触摸屏 1.恒压供水系统,采用西门子S7-200smart PLC,西门子触摸屏; 2.一拖二,根据设定压力自动投切电机,自动升降频率&#xf…

2026/5/17 11:08:41 阅读更多 →
周红伟:硅谷在用龙虾干什么?一个VC和一个科技博主的拆解

周红伟:硅谷在用龙虾干什么?一个VC和一个科技博主的拆解

龙虾帮一个VC拿下了1000万人民币的投资,一个旧游戏PC跑出了800万TikTok播放,一个人帮别人装龙虾一个月赚了25万美元。这些案例是真的吗?哪些能在中国复制?哪些只是硅谷的一次性红利?这篇文章浓缩了两次直播的精髓&…

2026/7/5 19:36:33 阅读更多 →

最新新闻

从零开始掌握漏洞挖掘:白帽黑客的核心技能与实战指南

从零开始掌握漏洞挖掘:白帽黑客的核心技能与实战指南

1. 挖漏洞:从神秘黑产到阳光职业的蜕变“挖漏洞”这个词,听起来总带着一丝神秘和“黑客”色彩。在很多人的印象里,它可能意味着在法律的灰色地带游走,利用技术手段寻找系统弱点,甚至与非法牟利挂钩。但今天&#xff0c…

2026/7/7 16:47:52 阅读更多 →
Impacket内网渗透实战:从NTLM/Kerberos协议到横向移动与权限提升

Impacket内网渗透实战:从NTLM/Kerberos协议到横向移动与权限提升

1. 项目概述:为什么Impacket是内网渗透的“瑞士军刀”?如果你在网络安全,特别是内网渗透测试领域摸爬滚打过一段时间,那么Impacket这个名字对你来说一定如雷贯耳。它远不止是一个简单的工具集,更像是一个由Python编写的…

2026/7/7 16:47:52 阅读更多 →
ICM-42688-P与PIC18LF4550在运动控制与工业传感中的应用

ICM-42688-P与PIC18LF4550在运动控制与工业传感中的应用

1. ICM-42688-P与PIC18LF4550的黄金组合解析在运动控制和工业传感领域,传感器与微控制器的选配往往决定了整个系统的性能天花板。ICM-42688-P作为TDK InvenSense最新的6轴MEMS运动传感器,与Microchip经典的PIC18LF4550微控制器形成的组合,正在…

2026/7/7 16:47:52 阅读更多 →
工业级EEPROM与MCU的可靠数据存储方案

工业级EEPROM与MCU的可靠数据存储方案

1. 项目背景与核心需求在工业控制和嵌入式系统领域,数据存储的可靠性直接关系到整个系统的稳定性。M24256E这颗EEPROM芯片和TM4C1299NCZAD微控制器的组合,恰好能满足严苛环境下的数据持久化需求。我最近在一个风力发电监控项目中采用了这套方案&#xff…

2026/7/7 16:43:50 阅读更多 →
开源鸿蒙 PC 高校师资培训暨鸿蒙 PC 俱乐部启动|全国高校正式招募

开源鸿蒙 PC 高校师资培训暨鸿蒙 PC 俱乐部启动|全国高校正式招募

2024 年华为开源鸿蒙 PC 版本正式发布,国产独立桌面操作系统迎来全新格局!目前全国多数高校尚未开设鸿蒙 PC 相关课程,专业师资极度稀缺,行业缺口巨大。 全国高校开源鸿蒙 PC 师资公益培训重磅启动!本次培训面向全国高…

2026/7/7 16:43:50 阅读更多 →
Kruskal-Wallis 检验 4 大常见误区:从假设条件到事后检验的完整避坑指南

Kruskal-Wallis 检验 4 大常见误区:从假设条件到事后检验的完整避坑指南

Kruskal-Wallis 检验实战避坑指南:从中位数误解到事后检验的深度解析当你面对三组或更多非正态分布数据时,Kruskal-Wallis检验往往是首选的统计工具。但许多分析师在使用过程中,常常陷入一些看似简单却影响深远的误区。本文将带你深入剖析这些…

2026/7/7 16:43:50 阅读更多 →

日新闻

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

图片浏览是移动应用中最高频的场景之一。从社交应用的照片流到电商平台的商品图集,从旅游应用的景点相册到摄影作品展示——用户对图片浏览的体验要求不断提高:流畅的切换动画、直观的缩略图导航、便捷的收藏操作、自动播放模式。HarmonyOS NEXT ArkUI 虽…

2026/7/7 0:05:16 阅读更多 →
24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V稳压芯片完整选型指南 PW8600 PW75XX PW2815 PW2312B LDODC/DC全方案 一、24V稳压方案概述 24V直流电源在工业自动化、门禁系统、电梯控制、汽车电子、LED驱动、监控设备等场景中应用极广,是最常见的中压直流母线电压。要将24V母线稳定降压至下游MCU、传感器…

2026/7/7 0:05:16 阅读更多 →
RAG+知识图谱混合检索与Graph RAG核心对比

RAG+知识图谱混合检索与Graph RAG核心对比

做企业RAG落地的团队,往往容易卡在一容易踩坑的选型难题: 当需求单纯靠向量RAG搞不定、单纯靠知识图谱也搞不定,必须同时依赖「文本语义理解 实体关系推理」时,到底是做「向量图谱混合检索」就够了,还是必须上「Grap…

2026/7/7 0:07:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/7 14:24:45 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/7 15:59:06 阅读更多 →

月新闻