机械制造行业网页如何用html5实现大文件分片上传源码?

前端老哥的奇幻漂流:20G文件上传历险记

大家好,我是那个"预算100元想造航天飞机"的陕西前端老哥。最近接了个外包,客户要求用原生JS实现20G文件上传,还要兼容IE9…我差点没把手中的肉夹馍吓掉!

需求分析(血压升高版)

客户要的功能清单:

  • 20G文件上传(我电脑硬盘才256G啊!)
  • 文件夹结构保持(1000+文件那种)
  • 加密传输(SM4/AES)
  • 断点续传(关机重启都不能丢进度)
  • 兼容IE9(2011年的老古董了)
  • 100元预算(还含3年维护)

这哪是外包需求,这分明是想用自行车价格买劳斯莱斯啊!不过老哥我混迹江湖多年,还是硬着头皮上了…

前端解决方案(穷得叮当响版)

// 文件上传核心代码 - 精简版(完整代码请加QQ群领取)classMegaUploader{constructor(){this.chunkSize=5*1024*1024;// 5MB分片(IE9会哭的)this.maxRetry=3;// 重试次数(心态要好)this.queue=[];// 上传队列(希望不要爆内存)this.supportFolder=!!window.FileSystem;// 检测文件夹支持(IE9:你在想peach)}// 加密函数(假装很安全)encrypt(data,key,algo='AES'){return`${algo}::${btoa(data)}::${key}`;// 真加密请用crypto-js}// 分片上传(祈祷不要蓝屏)asyncuploadChunk(file,start,end,chunkIndex){constchunk=file.slice(start,end);constencrypted=this.encrypt(chunk,'客户付不起加密钱');returnnewPromise((resolve,reject)=>{letretry=0;consttryUpload=()=>{constxhr=newXMLHttpRequest();xhr.open('POST','/upload',true);xhr.setRequestHeader('Content-Type','application/octet-stream');xhr.setRequestHeader('X-Chunk-Index',chunkIndex);xhr.onload=()=>resolve(xhr.response);xhr.onerror=()=>++retry<this.maxRetry?tryUpload():reject();xhr.send(encrypted);};tryUpload();});}// 处理文件夹上传(IE9用户请自觉退出)asyncuploadFolder(folder){if(!this.supportFolder){alert('您的浏览器太古老,建议升级到本世纪版本');return;}constentries=awaitthis.readDirectory(folder);for(constentryofentries){if(entry.isFile){awaitthis.uploadFile(awaitentry.getFile());}elseif(entry.isDirectory){awaitthis.uploadFolder(entry);}}}// 断点续传(全靠localStorage死撑)saveProgress(fileId,progress){localStorage.setItem(`upload_${fileId}`,JSON.stringify(progress));// 注意:IE9的localStorage只有5MB哦~}}// 使用示例(希望客户不会看控制台)constuploader=newMegaUploader();document.getElementById('file-input').addEventListener('change',(e)=>{constfile=e.target.files[0];if(file.size>20*1024*1024*1024){alert('老板,得加钱!20G文件太烧CPU了');return;}uploader.uploadFile(file).catch(()=>alert('上传失败,请检查网络或加预算'));});

IE9兼容方案(玄学版)

// IE9专属polyfill(效果看天意)if(navigator.userAgent.indexOf('MSIE 9')!==-1){console.log('检测到上古浏览器,开始施法...');// 假装支持Promisewindow.Promise=window.Promise||function(executor){executor(value=>setTimeout(()=>this.onFulfilled(value),0),reason=>setTimeout(()=>this.onRejected(reason),0));};// 假装支持File APIwindow.File=window.File||function(){};window.FileReader=window.FileReader||function(){this.readAsArrayBuffer=function(){alert('IE9不支持大文件上传,建议换浏览器或加钱');};};}

技术总结(心酸版)

  1. 大文件上传:必须分片,但IE9可能会原地爆炸
  2. 文件夹结构:现代浏览器可用webkitRelativePath,IE9…放弃吧
  3. 断点续传:localStorage存进度,但IE9只有5MB空间
  4. 加密传输:crypto-js库可以,但会增大体积
  5. 100元预算:建议买杯咖啡清醒一下

友情提示

老哥我最后想通了:这需求100元真做不了!不过欢迎加群374992201交流(真的有红包),我们可以:

  • 一起吐槽奇葩客户
  • 分享接单防坑指南
  • 组团开发分(逃)担(跑)压力

记住:程序员要团结,别让低价外包毁了行业!💪

(完整代码因"预算不足"无法在此展示,请加群领取…开玩笑的,真要实现这么复杂的功能,建议预算后面加几个零)

将组件复制到项目中

示例中已经包含此目录

引入组件

配置接口地址

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

处理事件

启动测试

启动成功

效果

数据库

效果预览

文件上传

文件刷新续传

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

文件夹上传

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

批量下载

支持文件批量下载

下载续传

文件下载支持离线保存进度信息,刷新页面,关闭页面,重启系统均不会丢失进度信息。

文件夹下载

支持下载文件夹,并保留层级结构,不打包,不占用服务器资源。

下载示例

点击下载完整示例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1183022.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32单片机智能喂食器164

STM32单片机智能喂食器164 51-C16时钟校时喂食水位加水喂水三餐3定时声光提醒OLED屏手动自动(无线方式选择) 51-C16N无无线-无APP板: 51-C16B蓝牙无线-APP版: 51-C16W-WIFI无线-APP版: 51-C16CAN-视频监控WIFI无线-APP版: 产品功能描述&#xff1a; 本系统由STC89C52单片机最小…

基于51/STM32单片机自动售货机扫码支付无人超市缺货补货语音设计(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

基于51/STM32单片机自动售货机扫码支付无人超市缺货补货语音设计STM32-S144-4种商品4路步进电机出货选货支付库存缺货提醒找零声光提醒按键TFT彩屏(无线方式选择) STM32-S144N无无线-无APP版: STM32-S144B蓝牙无线-APP版: STM32-S144W-WIFI无线-APP版: STM32-S144CAN-视频监控W…

金融终端如何通过百度ueditor实现跨浏览器截屏功能?

江西铁路行业集团公司项目需求解决方案 项目背景 作为江西铁路行业集团公司的项目负责人&#xff0c;我近期负责一个企业网站后台管理系统的升级项目。项目新增需求包括在文章发布模块中增加Word粘贴功能、Word文档导入功能以及微信公众号内容粘贴功能。这些功能需要通过在We…

东方博宜OJ 2053:图的 bfs 遍历 ← bfs + 链式前向星 / 邻接矩阵

​【题目来源】https://oj.czos.cn/p/2053【题目描述】一个有 n 个结点的无向连通图,这些结点以编号:1,2,...,n 进行编号,现给出结点间的连接关系。请以结点 1 为起点,按广度优先搜索(bfs)、优先访问小编号结…

医院电子病历系统如何集成百度UE的PDF签名导入功能?

.NET团队政务信息化文档集成方案&#xff08;UEditorASP.NET WebForm&#xff09; 一、方案背景与目标&#xff08;精准匹配客户需求&#xff09; 作为安徽IT软件公司.NET工程师&#xff0c;我深刻理解客户对高效发文、信创兼容、数据安全的核心诉求。针对企业网站后台管理系统…

2026 年 1 月蒸汽防爆烘箱厂家推荐排行榜,大型/高温/苏州地区蒸汽防爆烘箱,参数解析与价格指南,专业防爆与高效烘干实力之选 - 企业推荐官【官方】

2026 年 1 月蒸汽防爆烘箱厂家推荐排行榜,大型/高温/苏州地区蒸汽防爆烘箱,参数解析与价格指南,专业防爆与高效烘干实力之选 在化工、新能源、复合材料及制药等对生产安全与工艺要求极高的领域,蒸汽防爆烘箱作为一…

基于STM32单片机智能搬运机器人4维机械臂TFT彩屏摇杆设计套件132(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

基于STM32单片机智能搬运机器人4维机械臂TFT彩屏摇杆设计套件132(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码STM32单片机四自由度学习机械臂搬运132 四自由度机械臂组装视频教程&#xff08;复制到浏览器打开&#xff09;&…

【日记】突破了风车,然后跟朝哥聊了很久的天(2810 字)

正文上午涩涩,下午跳舞。“你把那群孩子搞得定吗?你教得了的话我给你开课时费,你教他们,到时候我就不回来了。” 朝哥笑了笑。说实话听他说这话我有些哭笑不得。然后那一瞬间,有个词突然闪现在了我的脑海里:护城…

基于STM32单片机指纹考勤门禁签到打卡无线APP云平台设计套件127(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

基于STM32单片机指纹考勤门禁签到打卡无线APP云平台设计套件127(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码 STM32单片机指纹开锁签到考勤系统127产品功能描述&#xff1a; 本系统由STM32F103C8T6单片机核心板、2.4/1.44寸…

基于STM32单片机智能无线可视化门铃语音摄像视频监控设计24-089(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

基于STM32单片机智能无线可视化门铃语音摄像视频监控设计24-089(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码24-089、STM32可视化门铃语音留言摄像头ISD1820语音录放APP设计 产品功能描述&#xff1a; 本设计由STM32F103C8T…

PaddleOCR移动端实战攻略:从问题到解决方案的全链路开发

PaddleOCR移动端实战攻略&#xff1a;从问题到解决方案的全链路开发 【免费下载链接】PaddleOCR Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80 languages recognition, provide data annotation and synthes…

我们的系统经常出现d3dx9_42.dll丢失问题 免费下载方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

艾体宝洞察 | 2025 网络安全回顾与启示:当 “人” 成为企业最大风险与最强防线

摘要&#xff1a;香港生产力促进局&#xff08;HKPC&#xff09;辖下 HKCERT 发布的《香港网络安全展望 2025》揭示了企业管治的一大警号&#xff1a;网络威胁已由单纯的技术攻击&#xff0c;演变为针对 “员工行为” 的精准猎杀。数据显示 2024 年网络钓鱼事故创五年新高&…

AMD ROCm深度学习环境终极配置指南:Windows 11快速上手

AMD ROCm深度学习环境终极配置指南&#xff1a;Windows 11快速上手 【免费下载链接】ROCm AMD ROCm™ Software - GitHub Home 项目地址: https://gitcode.com/GitHub_Trending/ro/ROCm 想要在Windows 11系统上释放AMD显卡的全部AI计算潜力&#xff1f;这篇完整的配置指…

如果你不会写诗,就看看读读这些AI诗歌,和它学一下

10. 【语言之镜 巴别塔之后】当所有语种的名词开始自由通婚&#xff0c;动词挣脱时态的锁链。诗歌成为最后的通用语&#xff0c;它不翻译意义&#xff0c;而是直接种植体验。在意义的废墟上&#xff0c;我们用手语和心跳重新建塔。11. 【记忆之镜 不断重写的光盘】过去并非固…

LinkAndroid手机连接助手:从入门到精通的完整使用指南

LinkAndroid手机连接助手&#xff1a;从入门到精通的完整使用指南 【免费下载链接】linkandroid Link Android and PC easily! 全能手机连接助手&#xff01; 项目地址: https://gitcode.com/modstart-lib/linkandroid 想要实现手机与电脑的无缝连接&#xff1f;LinkAnd…

高效VR视频下载全攻略:N_m3u8DL-RE专业工具深度解析

高效VR视频下载全攻略&#xff1a;N_m3u8DL-RE专业工具深度解析 【免费下载链接】N_m3u8DL-RE 跨平台、现代且功能强大的流媒体下载器&#xff0c;支持MPD/M3U8/ISM格式。支持英语、简体中文和繁体中文。 项目地址: https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE …

3大实战策略:轻松解决LightGBM模型Java部署难题

3大实战策略&#xff1a;轻松解决LightGBM模型Java部署难题 【免费下载链接】jpmml-lightgbm Java library and command-line application for converting LightGBM models to PMML 项目地址: https://gitcode.com/gh_mirrors/jp/jpmml-lightgbm 你是否曾经面临这样的困…

导师推荐!本科生必用AI论文网站TOP8测评

导师推荐&#xff01;本科生必用AI论文网站TOP8测评 2026年本科生AI论文写作工具测评&#xff1a;为何值得一看 在当前学术环境日益激烈的背景下&#xff0c;本科生撰写论文的难度与日俱增。从选题构思到资料查找&#xff0c;再到格式排版和内容润色&#xff0c;每一步都可能成…

百度网盘直链解析工具使用指南:轻松获取高速下载地址

百度网盘直链解析工具使用指南&#xff1a;轻松获取高速下载地址 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 在当今数字化时代&#xff0c;百度网盘作为国内最流行的云存储…