国企OA系统如何通过Java实现局域网内设计图纸的文件夹秒传与版本回溯? 📅 发布时间:2026/7/7 21:55:36 👁️ 浏览次数: 程序猿の毕业设计渡劫指南附代码求生攻略一、项目背景哭唧唧版作为一只即将被学校扫地出门的计科狗最近被毕业设计折磨得夜不能寐——导师甩下一句“做个文件管理系统要支持10G大文件上传文件夹断点续传IE8兼容否则别想毕业”说完就骑着共享单车溜了现在的情况是前端Vue3 原生JS要兼容到IE8比让恐龙玩Switch还离谱后端SpringBoot跑在Tomcat 6.0上比我家老古董电视还卡存储直接塞服务器硬盘导师说云存储太贵咱们穷苦大学生要艰苦奋斗浏览器从IE8到Chrome120全兼容包括龙芯浏览器这种国产神器二、技术选型妥协版上传组件现代浏览器H5 File API Web Workers防卡死IE8WebUploader Flash没错2023年还要写Flash代码最终方案双引擎热切换像混动车一样智能加密方案传输加密AES-128IE8用CryptoJS降级存储加密SM4信创浏览器强制要求密钥管理用户密码时间戳盐值防止导师偷看我学习资料断点续传进度存储localStorageIE8用userData模拟服务端记录MySQL文件系统双保险防止浏览器清空数据三、前端实现Vue3 原生JS// FileUploader.vue精简求生版exportdefault{data(){return{progress:0,isIE8:!!window.ActiveXObject||ActiveXObjectinwindow,chunkSize:5*1024*1024// 5MB分片}},methods:{triggerUpload(){if(this.isIE8){// 触发IE8上传通过iframe通信document.getElementById(ie8Uploader).contentWindow.startUpload();}else{// 现代浏览器直接触发document.getElementById(modernFileInput).click();}},// 现代浏览器文件处理handleModernFileChange(e){constfilese.target.files;Array.from(files).forEach(file{if(file.webkitRelativePath){this.uploadFolder(file);// 文件夹上传}else{this.uploadFile(file);}});},// 文件分片上传现代浏览器asyncuploadFile(file){constfileIdthis.generateFileId(file);consttotalChunksMath.ceil(file.size/this.chunkSize);letuploadedChunksthis.getSavedProgress(fileId)||0;for(letiuploadedChunks;itotalChunks;i){conststarti*this.chunkSize;constendMath.min(startthis.chunkSize,file.size);constchunkfile.slice(start,end);// 加密分片简化版constencryptedthis.encryptData(chunk);constformDatanewFormData();formData.append(file,encrypted);formData.append(fileId,fileId);formData.append(chunkIndex,i);formData.append(totalChunks,totalChunks);try{awaitfetch(/api/upload/chunk,{method:POST,body:formData});this.progressMath.floor(((i1)/totalChunks)*100);this.saveProgress(fileId,i1);}catch(e){console.error(上传失败:,e);break;}}},// IE8兼容方案伪代码uploadFileIE8(file){// 这里需要写100行ActiveXObject代码...// 核心思路通过XMLHttpRequest分片上传// 省略IE8兼容代码手酸了...},// 生成唯一文件ID兼容IE8generateFileId(file){if(this.isIE8){returnfile.namefile.sizefile.lastModified;// 简单拼接}returnfile.name-CryptoJS.MD5(file.namefile.size).toString();}}}四、后端实现SpringBoot Tomcat 6.0// FileUploadController.java求生版RestControllerRequestMapping(/api/upload)publicclassFileUploadController{Value(${file.upload-dir})privateStringuploadDir;// 初始化上传任务PostMapping(/init)publicResponseEntityinitUpload(RequestParamStringfileName,RequestParamlongfileSize){StringfileIdUUID.randomUUID().toString();StringtempDiruploadDir/temp/fileId;// 创建临时目录Tomcat 6.0需要手动处理路径newFile(tempDir).mkdirs();MapresponsenewHashMap();response.put(fileId,fileId);response.put(chunkSize,5242880);// 5MBresponse.put(uploadDir,tempDir);returnResponseEntity.ok(response);}// 处理分片上传PostMapping(/chunk)publicResponseEntityuploadChunk(RequestParam(file)MultipartFilefile,RequestParamStringfileId,RequestParamintchunkIndex,RequestParaminttotalChunks){try{StringtempDiruploadDir/temp/fileId;StringchunkPathtempDir/chunkIndex;// 解密文件简化版byte[]decrypteddecrypt(file.getBytes());// 保存分片Tomcat 6.0文件操作Files.write(Paths.get(chunkPath),decrypted);// 如果是最后一个分片合并文件if(chunkIndextotalChunks-1){mergeFile(fileId,tempDir);}returnResponseEntity.ok().build();}catch(Exceptione){returnResponseEntity.status(500).build();}}// 合并文件Tomcat 6.0兼容版privatevoidmergeFile(StringfileId,StringtempDir)throwsIOException{File[]chunksnewFile(tempDir).listFiles();if(chunksnull||chunks.length0)return;// 按分片序号排序Arrays.sort(chunks,Comparator.comparingInt(f-{Stringnamef.getName();returnInteger.parseInt(name);}));// 读取原始文件名从第一个分片中获取StringfileNameunknown;// 实际应从数据库或第一个分片获取StringoutputPathuploadDir/fileName;try(FileOutputStreamfosnewFileOutputStream(outputPath)){for(Filechunk:chunks){Files.copy(chunk.toPath(),fos);chunk.delete();// 删除分片}}// 删除临时目录newFile(tempDir).delete();}}五、IE8兼容血泪史附解决方案文件夹上传现代浏览器IE8需要用ActiveXObject遍历文件系统需要降低安全级别// IE8文件夹遍历伪代码functionbrowseFolderIE8(path){try{constfsonewActiveXObject(Scripting.FileSystemObject);constfolderfso.GetFolder(path);constfilesnewEnumerator(folder.files);for(;!files.atEnd();files.moveNext()){constfilefiles.item();// 递归处理子文件夹...}}catch(e){alert(请降低IE安全级别);}}localStorage替代方案// IE8的userData存储古老的黑科技functionsaveToUserData(key,value){conststoragedocument.createElement(div);storage.idie8Storage;storage.style.behaviorurl(#default#userData);document.body.appendChild(storage);storage.setAttribute(key,value);storage.save(fileUploadProgress);document.body.removeChild(storage);}XMLHttpRequest降级// IE8的XHR实现functioncreateIE8XHR(){try{returnnewActiveXObject(Msxml2.XMLHTTP);}catch(e){try{returnnewActiveXObject(Microsoft.XMLHTTP);}catch(e){alert(您的浏览器太古老了请升级);returnnull;}}}六、项目亮点吹牛版全浏览器兼容从IE8到Chrome120无缝支持连龙芯浏览器都能跑军工级加密AESSM4双算法支持导师看了都直呼专业企业级稳定性MySQL文件系统双进度存储就算服务器爆炸也不丢数据信创环境适配已通过龙芯浏览器测试学校机房的国产CPU终于有用武之地了七、求职彩蛋现在加入我的毕业设计互助群QQ374992201即可获得完整项目源码含IE8兼容补丁简历优化指导群主亲授如何把毕业设计吹成国家级项目内推机会群内有多家IT公司HR潜伏特别提示现在加群还能参与找bug换红包活动每发现一个兼容性问题奖励5-20元导师说这叫众测最后小声说这个项目还没完全跑通但吹牛的功夫已经练得炉火纯青了…导入项目导入到Eclipse点击查看教程导入到IDEA点击查看教程springboot统一配置点击查看教程工程NOSQLNOSQL示例不需要任何配置可以直接访问测试创建数据表选择对应的数据表脚本这里以SQL为例修改数据库连接信息访问页面进行测试文件存储路径up6/upload/年/月/日/guid/filename效果预览文件上传文件刷新续传支持离线保存文件进度在关闭浏览器刷新浏览器后进行不丢失仍然能够继续上传文件夹上传支持上传文件夹并保留层级结构同样支持进度信息离线保存刷新页面关闭页面重启系统不丢失上传进度。下载示例点击下载完整示例
SOC蓄电池双向DC/DC充放电控制Matlab仿真模型探索 考虑SOC蓄电池 双向DC/DC 充放电控制 matlab仿真模型 buck boost (1)蓄电池双向DCDC充放电控制MATLAB仿真模型; (2)双向DC/DC电路拓扑为Buck-Boost,电压外环电流内环双闭环控制; (3&… 2026/7/4 6:55:03
2026年3月建筑AI实测白皮书:10款工具,EVAI第一 2026年3月建筑AI实测白皮书:10款工具,EVAI第一2026年,建筑设计行业进入“方案交付按小时计价”的新阶段。根据公开行业研究口径与本次调研汇总,国内与建筑设计直接相关的AI软件与服务市场规模已接近380亿元,近三年复合… 2026/5/17 10:25:27
【golang学习之旅】使用VScode安装配置Go开发环境 1. 下载并安装Go 1.1 下载地址1.2 选择版本并下载1.3 安装目录1.4 验证是否安装成功 2. 配置环境变量 2.1 配置步骤2.2 GO部分环境变量说明 3. 下载或更新 Vscode 3.1 下载地址3.2 安装步骤 4. 为Go开发配置VScode 1. 下载并安装Go 1.1 下载地址 https://studygolang.com/dl… 2026/7/7 8:36:49
3分钟快速上手:小红书无水印下载神器XHS-Downloader完全指南 3分钟快速上手:小红书无水印下载神器XHS-Downloader完全指南 【免费下载链接】XHS-Downloader 小红书(XiaoHongShu、RedNote)链接提取/作品采集工具:提取账号发布、收藏、点赞、专辑作品链接;提取搜索结果作品、用户链… 2026/7/8 11:32:45
5大核心功能解析:UABEA如何成为Unity资源编辑的终极利器 5大核心功能解析:UABEA如何成为Unity资源编辑的终极利器 【免费下载链接】UABEA c# uabe for newer versions of unity 项目地址: https://gitcode.com/gh_mirrors/ua/UABEA UABEA是一款基于C#开发的跨平台Unity Asset Bundle编辑器,专门针对现代… 2026/7/8 11:32:45
STM32与IIM-20670实现高精度6DoF运动跟踪方案 1. 项目背景与核心价值在工业自动化、无人机导航、VR/AR设备等需要精确姿态感知的领域,6自由度(6DoF)运动跟踪技术一直是核心需求。传统方案往往面临两个痛点:一是低端IMU模块存在零漂和温漂问题,长时间运行误差累积明… 2026/7/8 11:30:40
家政系统:家政创业必备的数字化解决方案 在“懒人经济”盛行的当下,上门家政服务已成为消费升级的热门赛道。许多创业者都在问:做家政平台是不是单纯开发一个预约小程序就行了?如何才能快速搭建一套既能满足用户需求、又能高效管理且持续盈利的平台?针对这些疑问… 2026/7/8 11:30:40
IIM-20670与MK24FN256VDC12的高精度运动跟踪方案 1. 项目概述:基于IIM-20670与MK24FN256VDC12的运动跟踪方案 在工业自动化、无人机导航和VR设备等领域,高精度运动跟踪一直是核心技术痛点。TDK InvenSense的IIM-20670作为一款6轴SmartIndustrial运动跟踪传感器,集成了3轴陀螺仪(4… 2026/7/8 11:30:40
结构化正则性:让机器人真正理解物理世界的泛化机制 1. 这不是“世界模型”的炫技,而是让机器人真正看懂物理世界的底层逻辑“基于结构化正则性的机器人世界模型泛化机制”——这个标题乍一看像论文摘要,但如果你在工业机器人、服务机器人或具身智能方向做过两年以上实操,第一反应不会是点头&am… 2026/7/8 11:28:36
BetterNCM安装器:高效管理网易云插件的最佳选择 BetterNCM安装器:高效管理网易云插件的最佳选择 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 还在为网易云音乐插件的繁琐安装流程而烦恼吗?BetterNCM安装器是… 2026/7/8 0:02:48
运动控制系统安全设置对比:ECI3808的3种限位保护与急停逻辑实现 运动控制系统安全机制深度解析:限位保护与急停逻辑的设计哲学在精密制造与自动化领域,运动控制系统的安全设计绝非简单的功能堆砌,而是一套融合了机械工程、电气原理和软件算法的防御体系。当一台数控机床以每分钟数万转的速度运转࿰… 2026/7/8 0:06:48
AI大模型应用开发:小白也能抓住的红利风口,收藏这篇入门指南! 文章指出,虽然微软等科技巨头在裁员,但英伟达等公司却在积极扩招AI相关人才,尤其是具身智能、仿真等领域。AI行业正在经历结构性调整,传统岗位被淘汰,而大模型应用开发等新岗位需求旺盛。对于想转行或学习AI的普通人来… 2026/7/8 0:10:49
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/7 11:26:57
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/7 11:26:57
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/7 11:26:58