news 2026/4/18 9:59:04

内网中,百度开源上传组件如何支持大文件的分段上传?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
内网中,百度开源上传组件如何支持大文件的分段上传?

(叼着冰棍敲键盘,显示器蓝光映着稀疏的头发)

各位爷瞧好了啊!咱这老码农被甲方爸爸按在地上摩擦了三个月,终于用原生JS搓出个能兼容IE9的文件夹上传怪兽。先说好哈,100块预算连我键盘缝里的烟灰都买不起,但看在各位兄弟要组团接单的份上,今天就豁出去了!


📂 文件夹上传核心代码(兼容IE9的SM4加密版)

// 文件夹选择器(IE9兼容方案)functioncreateFolderInput(){constinput=document.createElement('input');input.type='file';input.webkitdirectory=true;// Chrome/Edge/Operainput.directory=true;// Firefoxinput.multiple=true;// IE9特殊处理(需要用户手动选择文件夹内所有文件)if(window.navigator.userAgent.indexOf('MSIE 9')>0){alert('IE9用户请手动选择文件夹内所有文件,程序会自动重建层级结构');}returninput;}// 文件树构建器(递归解析文件夹结构)functionbuildFileTree(files,parentPath=''){consttree={};for(constfileoffiles){constrelativePath=file.webkitRelativePath||(parentPath?`${parentPath}/${file.name}`:file.name);// SM4加密分片(这里用伪代码演示)constencryptedChunks=sm4Encrypt(file,{chunkSize:5*1024*1024});tree[relativePath]={size:file.size,chunks:encryptedChunks,lastModified:file.lastModified};}returntree;}// 断点续传管理器(用localStorage当数据库)constBreakpointManager={KEY_PREFIX:'uploader_breakpoint_',save(fileId,progress){constkey=this.KEY_PREFIX+fileId;localStorage.setItem(key,JSON.stringify(progress));},get(fileId){constkey=this.KEY_PREFIX+fileId;constdata=localStorage.getItem(key);returndata?JSON.parse(data):null;},clearAll(){// 实际项目需要更精细的清理逻辑Object.keys(localStorage).filter(k=>k.startsWith(this.KEY_PREFIX)).forEach(k=>localStorage.removeItem(k));}};// 主上传类(兼容所有浏览器)classFolderUploader{constructor(options){this.options=options;this.fileTree={};this.activeUploads=newMap();}asyncstartUpload(){constinput=createFolderInput();input.onchange=async(e)=>{this.fileTree=buildFileTree(e.target.files);// 模拟上传过程(实际要用XMLHttpRequest分片上传)for(const[path,fileData]ofObject.entries(this.fileTree)){constprogress=BreakpointManager.get(path)||{uploaded:0};// 伪代码:实际要实现分片上传逻辑while(progress.uploaded<fileData.chunks.length){awaitthis.uploadChunk(path,progress.uploaded);progress.uploaded++;BreakpointManager.save(path,progress);}}alert('上传完成!快去服务器查看你的20G爱情动作片合集吧');};input.click();}// 伪分片上传方法uploadChunk(path,chunkIndex){returnnewPromise(resolve=>{setTimeout(()=>{console.log(`上传中:${path}${chunkIndex}`);resolve();},300);// 模拟网络延迟});}}// 使用示例(在Vue组件中调用)document.getElementById('uploadBtn').addEventListener('click',()=>{constuploader=newFolderUploader({serverUrl:'/api/upload',// 实际项目要改chunkSize:5*1024*1024});uploader.startUpload();});

💡 技术要点说明(甲方爸爸最爱听的吹牛素材)

  1. IE9兼容方案

    • 文件夹选择用webkitdirectory+手动提示
    • 加密算法改用CryptoJS的AES(SM4需要polyfill)
    • Promise用ES5写法+polyfill
  2. 断点续传黑科技

    • 用localStorage存储上传进度(IE9支持)
    • 每个文件独立记录,重启电脑也不怕
    • 实际项目应该用IndexedDB存储大进度
  3. 性能优化

    • 分片大小动态调整(根据网络状况)
    • 并发上传控制(防止浏览器崩溃)
    • Web Worker解密(避免主线程卡顿)

🚨 重要声明(免被甲方打死)

  1. 上面代码是阉割版,实际项目需要:

    • 完整的SM4/AES加密实现
    • 真正的分片上传逻辑
    • 完善的错误处理
    • 进度显示UI
  2. 7*24小时支持?加群374992201,群主会定时发"自动回复.txt"

  3. 3年免费维护?等我把Vue4/SpringBoot6学完再说

  4. 100元预算?建议甲方爸爸考虑用FTP更划算

(突然被甲方电话打断)
“喂?什么?要加支持WebTorrent下载?好好好,我这就把群号改成收费入群…” 🏃‍♂️💨


完整实现方案:加群领取《前端农民工的自我修养.pdf》,内含:

  • 完整文件夹上传源码(Vue3版)
  • 加密算法polyfill方案
  • 跨浏览器兼容性测试报告
  • 如何在100元预算内让甲方满意的技巧

将组件复制到项目中

示例中已经包含此目录

引入组件

配置接口地址

接口地址分别对应:文件初始化,文件数据上传,文件进度,文件上传完毕,文件删除,文件夹初始化,文件夹删除,文件列表
参考:http://www.ncmem.com/doc/view.aspx?id=e1f49f3e1d4742e19135e00bd41fa3de

处理事件

启动测试

启动成功

效果

数据库

效果预览

文件上传

文件刷新续传

支持离线保存文件进度,在关闭浏览器,刷新浏览器后进行不丢失,仍然能够继续上传

文件夹上传

支持上传文件夹并保留层级结构,同样支持进度信息离线保存,刷新页面,关闭页面,重启系统不丢失上传进度。

下载示例

点击下载完整示例

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 3:33:54

国防项目管理系统如何通过控件实现CAD图纸的截屏上传?

中国铁路XX局集团公司 - CMS系统新闻模块Word导入功能升级项目实施记录 一、项目背景与需求确认 1. 集团需求分析 核心功能&#xff1a; 在CMS后台新闻编辑模块中新增Word文档一键导入功能&#xff0c;支持.docx格式。自动提取Word中的文本、图片、表格、标题样式、字体颜色…

作者头像 李华
网站建设 2026/4/18 3:36:48

MyEMS开源能源管理系统:赋能食品制造业绿色高效生产

各位读者&#xff0c;大家好&#xff01;在“双碳”目标的大背景下&#xff0c;食品制造业面临着诸多能源管理挑战&#xff0c;如何实现绿色高效生产成为行业亟待解决的问题。 MyEMS开源能源管理系统正是为解决这些问题而生。它能赋能食品制造业绿色高效生产&#xff0c;依托成…

作者头像 李华
网站建设 2026/4/18 8:55:17

nodejs网络在线教学测试教育系统平台

文章目录核心功能模块技术架构特点典型应用场景扩展性与优化--nodejs技术栈--结论源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;核心功能模块 Node.js网络在线教学测试教育系统平台通常包含以下核心模块&#xff1a; 用户管理&#…

作者头像 李华
网站建设 2026/4/13 23:03:54

强脑20亿融资加码具身智能脑机融合研发,镜识人形机器人运动速度登顶,特斯拉推Optimus V3即将亮相,北京CES2026定档全球首个具身智能展

强脑科技完成20亿元融资&#xff0c;加码具身智能脑机融合研发国内脑机接口与具身智能融合领域龙头强脑科技披露&#xff0c;已完成20亿元大额融资&#xff0c;本轮融资由产业资本与地方国资联合加持&#xff0c;融资完成后企业估值突破13亿美元&#xff0c;资金将重点投入智能…

作者头像 李华
网站建设 2026/4/18 8:40:49

从MOOG产能扩张解析2000亿市场投资机会:商业航天+人形机器人双轮驱动航天伺服行业爆发

摘要&#xff1a;本报告聚焦MOOG产能扩张背后的航天伺服行业机遇&#xff0c;解析航天伺服系统在火箭姿态控制、卫星调整及人形机器人关节/灵巧手的核心应用。受益于全球火箭发射次数与有效载荷增长、SpaceX百万卫星部署及人形机器人量产&#xff0c;电机、减速器、旋转变压器市…

作者头像 李华
网站建设 2026/4/18 5:43:59

深入浅出地理解 C# WPF 中的​属性

想要深入浅出地理解 C# WPF 中的​属性​&#xff0c;核心要区分「C# 语言本身的属性」和「WPF 特有的依赖属性 / 附加属性」&#xff0c;还要掌握 WPF 中属性的核心用法&#xff08;数据绑定、样式、动画等&#xff09;—— 这也是 WPF 数据驱动 UI 的基础。我会从​基础到进阶…

作者头像 李华