国产化OA系统如何用HTML5+WebUploader适配信创环境的文件夹上传? 📅 发布时间:2026/7/9 17:55:31 👁️ 浏览次数: 一个大三仔的编程血泪史大文件上传系统开发实录前言各位老铁们好我是广西某不知名大学网络工程专业的大三学生最近被导师逼着做一个支持10G文件上传、断点续传、文件夹层级保留、全浏览器兼容、还要加密传输存储的变态文件管理系统。导师说做好了能推荐去大厂做不好就等着延毕吧哭唧唧。技术选型经过一番折腾我选定了以下豪华套餐前端Vue3 WebUploader百度开源组件后端Python虽然我还不会但听说能速成数据库MySQL学校机房老古董只认这个存储阿里云OSS白嫖的免费额度开发工具VSCode比Dev-C香多了前端实现原生JS版以下是经过我三天三夜不眠不休实际是抄了20篇博客写出的前端核心代码// 兼容IE8的XMLHttpRequest封装头发已掉光functioncreateXHR(){if(window.XMLHttpRequest){returnnewXMLHttpRequest();}elseif(window.ActiveXObject){try{returnnewActiveXObject(Msxml2.XMLHTTP);}catch(e){try{returnnewActiveXObject(Microsoft.XMLHTTP);}catch(e){alert(您的浏览器太古老了建议使用Chrome或Firefox);returnnull;}}}}// 文件分片上传类命名暴露了我是菜鸟functionFileUploader(){this.chunkSize5*1024*1024;// 5MB分片this.filenull;this.fileId;this.uploadedChunks[];this.init();}FileUploader.prototype{init:function(){// 本地存储进度兼容IE8的localStorage替代方案if(!window.localStorage){window.localStorage{getItem:function(key){returndocument.cookie.replace(newRegExp((?:^|.*;\\s*)encodeURIComponent(key).replace(/[\-\.\\*]/g,\\$)\\s*\\\\s*((?:[^;](?!;))*[^;]?).*),$1)||null;},setItem:function(key,value){document.cookieencodeURIComponent(key)encodeURIComponent(value); expiresTue, 19 Jan 2038 03:14:07 GMT; path/;}};}},// 计算文件MD5IE8哭晕在厕所calculateFileMD5:function(file,callback){if(window.FileReaderwindow.crypto){// 现代浏览器方案constreadernewFileReader();reader.onload(e){constarrayBuffere.target.result;crypto.subtle.digest(MD5,arrayBuffer).then(buffer{consthashArrayArray.from(newUint8Array(buffer));consthashHexhashArray.map(bb.toString(16).padStart(2,0)).join();callback(hashHex);});};reader.readAsArrayBuffer(file);}else{// IE8兼容方案实际不可用这里只是占位alert(您的浏览器不支持MD5计算上传可能不安全);callback(fake-md5-for-ie8);}},// 分片上传核心方法uploadFile:function(file){this.filefile;this.fileIdfile.name-file.size-file.lastModified;// 从本地存储加载已上传分片信息constsavedChunkslocalStorage.getItem(upload_this.fileId);this.uploadedChunkssavedChunks?JSON.parse(savedChunks):[];// 计算总分片数consttotalChunksMath.ceil(file.size/this.chunkSize);// 模拟上传过程实际需要替换为真实AJAX请求letuploaded0;for(leti0;itotalChunks;i){// 跳过已上传的分片if(this.uploadedChunks.includes(i)){uploaded;continue;}// 这里应该是真实的AJAX上传代码// 为了演示我们用setTimeout模拟setTimeout((chunkIndex){console.log(上传分片${chunkIndex}/${totalChunks});// 模拟上传成功if(Math.random()0.1){// 10%失败率测试断点续传this.uploadedChunks.push(chunkIndex);localStorage.setItem(upload_this.fileId,JSON.stringify(this.uploadedChunks));uploaded;if(uploadedtotalChunks){console.log(上传完成);// 这里应该调用合并文件的接口}}else{console.log(分片${chunkIndex}上传失败将重试...);}},i*1000,i);}},// 文件夹上传递归实现uploadFolder:function(folderEntry){if(!window.FileReader||!window.DirectoryReader){alert(您的浏览器不支持文件夹上传请使用Chrome/Firefox最新版);return;}constdirectoryReaderfolderEntry.createReader();directoryReader.readEntries((entries){for(letentryofentries){if(entry.isFile){entry.file(file{// 为文件夹中的文件添加路径前缀constrelativePathentry.fullPath.substring(1);// 去掉开头的/constfakeFilenewFile([file],file.name,{type:file.type,lastModified:file.lastModified});// 这里需要扩展File对象以保存路径信息实际实现更复杂console.log(准备上传文件:,relativePath,fakeFile);this.uploadFile(fakeFile);});}elseif(entry.isDirectory){this.uploadFolder(entry);}}});}};// Vue3组件示例极简版const{createApp,ref}Vue;createApp({setup(){constuploaderref(null);consthandleFileChange(e){constfilese.target.files;if(files.length0){if(!uploader.value){uploader.valuenewFileUploader();}uploader.value.uploadFile(files[0]);}};consthandleFolderChange(e){// 文件夹上传需要用户拖放或使用// 这里只是示例constfolderInpute.target;if(folderInput.filesfolderInput.files.length0){// 实际需要处理DirectoryEntry对象console.log(检测到文件夹输入但前端实现复杂...);}};return{handleFileChange,handleFolderChange};}}).mount(#app);开发趣事IE8兼容噩梦为了兼容IE8我不得不实现了一个cookie-based的localStorage替代方案结果发现IE8的cookie有4KB限制大文件上传直接崩溃。MD5计算IE8没有crypto API我尝试用Flash实现MD5结果发现学校机房禁用了Flash。文件夹上传发现WebUploader在IE和国产浏览器上对文件夹的支持各不相同最后不得不写了一堆浏览器嗅探代码。断点续传本地存储在隐私模式下不可用导致测试时经常丢失进度差点摔键盘。求助与招募现在项目卡在后端开发上求Python大神救救孩子需要实现文件分片接收接口需要实现分片合并接口需要实现加密存储功能需要兼容所有浏览器包括IE8重金求师加入QQ群374992201新人进群送1-99元红包推荐工作成功者提成20%项目金额招收超级会员提成直接50%比如2万项目直接提1万最终目标希望在毕业答辩时能演示一个支持10G文件上传断点续传重启电脑也不怕文件夹层级完美保留全浏览器兼容加密传输存储的完整文件管理系统让导师刮目相看顺利进入大厂PS如果实在做不出来可能要考虑转行送外卖…将组件复制到项目中示例中已经包含此目录引入组件配置接口地址接口地址分别对应文件初始化文件数据上传文件进度文件上传完毕文件删除文件夹初始化文件夹删除文件列表参考http://www.ncmem.com/doc/view.aspx?ide1f49f3e1d4742e19135e00bd41fa3de处理事件启动测试启动成功效果数据库效果预览文件上传文件刷新续传支持离线保存文件进度在关闭浏览器刷新浏览器后进行不丢失仍然能够继续上传文件夹上传支持上传文件夹并保留层级结构同样支持进度信息离线保存刷新页面关闭页面重启系统不丢失上传进度。批量下载支持文件批量下载下载续传文件下载支持离线保存进度信息刷新页面关闭页面重启系统均不会丢失进度信息。文件夹下载支持下载文件夹并保留层级结构不打包不占用服务器资源。下载示例点击下载完整示例
在CKEditor中怎样粘贴Word文档同时保留内置图片? 企业网站后台管理系统功能扩展项目记录 作为北京某国企的项目负责人,近期我负责的企业网站后台管理系统文章发布模块迎来了新的需求挑战。客户要求增加 Word 粘贴功能、Word 文档导入功能以及微信公众号内容粘贴功能(自动下载公众号文章图片并上传至服务… 2026/7/8 21:28:12
MogFace-large部署指南:ARM64架构(如Mac M2)原生支持部署方案 MogFace-large部署指南:ARM64架构(如Mac M2)原生支持部署方案 1. 环境准备与快速部署 在开始部署MogFace-large人脸检测模型之前,我们需要先准备好运行环境。这个模型特别适合在ARM64架构的设备上运行,比如苹果的M1/… 2026/7/8 16:38:39
性能优化策略:代码与架构双升级 在当今高速迭代的软件开发环境中,性能优化已成为确保系统稳定性和用户体验的核心环节。尤其对于软件测试从业者而言,性能问题往往成为测试过程中的“隐形杀手”——它可能导致测试用例失败、回归测试效率低下,甚至掩盖潜在缺陷。一、性能优化… 2026/7/7 7:44:15
GitHub下载慢?这个免费插件让你速度飙升5倍! GitHub下载慢?这个免费插件让你速度飙升5倍! 【免费下载链接】Fast-GitHub 国内Github下载很慢,用上了这个插件后,下载速度嗖嗖嗖的~! 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 还在为GitHub龟… 2026/7/9 17:53:32
PyTorch 2.0 多头自注意力机制实战:从零实现 8 头注意力模块 PyTorch 2.0 多头自注意力机制实战:从零实现 8 头注意力模块在自然语言处理和计算机视觉领域,Transformer 架构已经成为当前最强大的模型基础。而 Transformer 的核心组件——多头自注意力机制(Multi-Head Self-Attention)&#x… 2026/7/9 17:51:31
使用silk-v3-decoder解码微信QQ语音:原理、工具与实战指南 1. 项目概述:为什么你的微信QQ语音总是“哑巴”?不知道你有没有遇到过这种情况:朋友在微信上发来一段重要的语音消息,你兴冲冲地点开,结果手机或电脑上只显示一个无法识别的文件图标,或者干脆提示“文件格式… 2026/7/9 17:51:31
DeepXDE 库 2.8 版本:3 步搭建 PINN 求解 2D 热传导方程 DeepXDE 2.8实战指南:三步构建PINN求解二维热传导方程在科学计算领域,求解偏微分方程(PDE)一直是极具挑战性的任务。传统数值方法如有限元、有限差分虽然成熟,但在处理复杂几何或高维问题时面临计算成本高、网格生成困… 2026/7/9 17:49:30
无需灌水免校准:新一代CG-36土壤水势监测传感器 产品概述这款土壤水势传感器安装便捷,插入土壤剖面坑后包裹湿土即可完成布设,操作门槛低。它支持免维护、免校准,可覆盖较大范围的土壤水势测量,无需灌水操作,大量程特性让它成为自然系统水势监测的理想选择࿰… 2026/7/9 17:47:29
2026年7月8日科技热点新闻 国内科技热点 创新成果与产业规模 世界知识产权组织《2025年全球创新指数报告》显示,中国首次跻身全球创新指数排名前十,是唯一进入前十的中等收入国家;24个创新集群跻身全球百强,连续3年居世界第一,“深圳—香港—广州… 2026/7/9 17:45:27
机器视觉与PLC集成:轮毂缺陷检测与字符识别误差控制在0.2mm内 机器视觉与PLC集成:轮毂缺陷检测与字符识别误差控制在0.2mm内的技术实现轮毂作为汽车关键零部件,其表面质量直接影响行车安全与美观。传统人工检测效率低且易漏检,而采用机器视觉与PLC集成方案可实现微米级精度检测。本文将深入解析高精度视觉… 2026/7/9 0:01:04
GBase 8a vs MySQL 8.0:ALTER TABLE语法与限制的5点关键差异对比 GBase 8a与MySQL 8.0:ALTER TABLE语法差异深度解析与实战指南1. 两种数据库的ALTER TABLE能力全景对比在数据库架构设计和运维过程中,表结构变更(DDL操作)是不可避免的需求。GBase 8a作为国产分析型数据库代表,与开源M… 2026/7/9 0:03:06
【大数据毕业设计】基于多源旅游数据的景区热度分析与推荐系统的设计与实现 基于 Django 的旅游偏好挖掘与景区推荐系统(源码+文档+远程调试,全bao定制等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am… 2026/7/9 0:05:09
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/8 20:15:17
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/8 14:25:08