当前位置: 首页 > news >正文

PHP后端如何配合WebUploader实现超大附件秒传与断点续传?

【一个网工仔的悲喜交加:前端搞定了,后端求包养!】

各位道友好!俺是山西某高校网络工程专业的菜狗一枚,刚啃完《JavaScript从入门到住院》,就被导师按头要求搞个10G大文件上传系统。现在前端用Vue3+原生JS硬怼出了半成品,但后端还是个大坑啊!求各路神仙带带弟弟,或者收个关门弟子(管饭就行)!


💻 前端魔改代码(Vue3 + 原生JS兼容IE8版)

// FileUploader.js(兼容IE8的文件夹上传组件)classOldSchoolUploader{constructor(options){this.chunks=[];// 分片信息存储this.fileMd5='';// 文件唯一标识this.isIE8=!!window.ActiveXObject||"ActiveXObject"inwindow;// 检测IE8this.isXinChuang=/Lotus|RedLotus|QAX/.test(navigator.userAgent);// 检测国产浏览器// IE8专用XMLHttpRequest封装this.getIE8XHR=()=>{try{returnnewActiveXObject("Msxml2.XMLHTTP");}catch(e){returnnewActiveXObject("Microsoft.XMLHTTP");}};// 计算文件MD5(IE8用文件名+大小当伪MD5)this.calculateMD5=(file,callback)=>{if(this.isIE8){callback(`${file.name}-${file.size}-${Date.now()}`);}else{// 正常MD5计算(此处省略200行crypto-js代码)console.log("正常浏览器MD5计算中...");}};}// 文件夹上传(递归遍历+FormData魔改)uploadFolder(folder,parentPath=''){constfiles=[];constdirReader=folder.createReader();dirReader.readEntries(entries=>{entries.forEach(entry=>{if(entry.isFile){entry.file(file=>{files.push({path:`${parentPath}/${entry.name}`,file});});}else{this.uploadFolder(entry,`${parentPath}/${entry.name}`);}});// 国产浏览器降级处理if(this.isXinChuang){setTimeout(()=>this.processFiles(files),100);}else{Promise.all(files).then(()=>this.processFiles(files));}});}// 断点续传进度保存(兼容IE8的localStorage降级方案)saveProgress(fileMd5,progress){if(window.localStorage){localStorage.setItem(`upload_${fileMd5}`,JSON.stringify(progress));}elseif(document.documentElement.addBehavior){// IE8及以下用userData存储conststorage=document.createElement('div');storage.addBehavior('#default#userData');storage.setAttribute('progress',JSON.stringify(progress));storage.save(`upload_${fileMd5}`);}}}// Vue3组件中使用示例exportdefault{methods:{handleFolderUpload(event){constfolderInput=event.target;if(folderInput.files&&folderInput.files[0]){constfolder=folderInput.files[0].webkitRelativePath?folderInput.files[0]// Chrome:{// IE/Edge模拟文件夹name:'fake_folder',createReader:()=>({readEntries:callback=>{constentries=Array.from(folderInput.files).map(file=>({isFile:true,name:file.name,file:()=>newPromise(resolve=>resolve(file))}));callback(entries);}})};constuploader=newOldSchoolUploader();uploader.uploadFolder(folder);}}}}

🎯 血泪经验总结

  1. 浏览器兼容性

    • IE8用ActiveXObject替代fetch
    • 国产浏览器(如龙芯)需禁用某些现代API
    • 文件路径统一用/避免转义问题
  2. 断点续传秘籍

    // 本地存储进度(兼容IE8)constsaveProgress=(fileMd5,progress)=>{if(window.localStorage){localStorage.setItem(`upload_${fileMd5}`,JSON.stringify(progress));}else{// IE8降级方案document.cookie=`upload_${fileMd5}=${encodeURIComponent(JSON.stringify(progress))};path=/`;}};
  3. 加密传输方案

    • 前端用CryptoJS加密(需引入polyfill支持IE8)
    • 后端计划用Python的cryptography库解密
    • 传输走HTTPS(本地用自签名证书)

🙏 江湖救急

现诚征各路大侠:

  1. 加入QQ群:374992201(进群领1-99元红包,推荐项目拿50%提成!)
  2. 求后端师傅收留(Python/Java/Go都行,可签卖身契)
  3. 需要完整项目代码的兄弟,群里每天晚上8点准时发车!

(附:导师说项目要是能过,请群主吃平遥牛肉管够!🐂)

💡 群内福利

  • 免费提供IE8兼容性测试工具包
  • 每周三晚代码接诊(大佬在线改bug)
  • 共享国产浏览器虚拟机环境(龙芯/红莲花/奇安信)

PS:群里还有"从0到1搭建后端"系列教程,包括:

  1. Python Flask/Django极速入门
  2. MySQL分片存储方案设计
  3. CentOS部署全流程手把手教学

(悄悄说:群文件里有《如何让导师感动到哭的答辩技巧》.pdf)🤫

将组件复制到项目中

示例中已经包含此目录

引入组件

配置接口地址

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

处理事件

启动测试

启动成功

效果

数据库

效果预览

文件上传

文件刷新续传

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

文件夹上传

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

下载示例

点击下载完整示例

http://www.jsqmd.com/news/420617/

相关文章:

  • 应对专利无效、权属纠纷,企业如何守住核心技术产权?
  • 芯片制造中,C#如何处理文件夹上传的加密需求?
  • 2026年目前有名的抖音广告代运营企业口碑推荐榜,抖音广告代运营/信息流广告代运营,抖音广告代运营公司推荐排行榜 - 品牌推荐师
  • 青岛口碑不错的隐形车衣专业公司费用怎么算 - mypinpai
  • 露,集成化信息化信号采集处理系统 一体化生物医学信号采集系统 机能集成化信号采集与处理系统
  • LeetCode1680:连接连续二进制数字
  • 以太网接口设备写静态路由的时候为什么写下一跳ip地址?而不是出接口。(ensp模拟说明)
  • 上海宠物口腔健康守护者:2026年优质医生推荐,狗口腔溃疡诊疗/狗狗牙结石/猫咪口腔护理/猫咪口炎,宠物口腔医生哪个靠谱 - 品牌推荐师
  • 哈尔滨沃尔沃XC90俄罗斯STP汽车隔音降噪 有效解决胎噪、风噪、发动机噪音 哈尔滨最专业汽车隔音店-博士达汽车音响倾心打造
  • 科研党收藏!降AI率平台 千笔·降AIGC助手 VS Checkjie,专为本科生定制
  • Snowflake收购数据库迁移技术初创公司Datometry
  • 闭眼入!8个AI论文网站深度测评:继续教育毕业论文写作必备工具推荐
  • 交稿前一晚!降AIGC平台 千笔·专业降AI率智能体 VS WPS AI,继续教育必备神器
  • 别再瞎找了!AI论文平台 千笔ai写作 VS 灵感ai,自考写论文就选它!
  • 6.4 企业数据分析师Agent:数据查询与报告生成实战
  • 6.3 智能客服系统端到端开发:对话管理加RAG加人工转接
  • 什么时候该用接口,什么时候该用抽象类,应该怎么组合才好用,才高级
  • 2026年2月实木家具实力厂家推荐榜,匠心工艺实测解析 - 品牌鉴赏师
  • 大模型不是你家熊孩子:聊聊生成式模型“去偏 / 去毒”流水线怎么落地
  • 想选专业的家装装修设计公司,上海朗域装饰的口碑咋样 - mypinpai
  • 2026年2月木工机械设备供应厂家推荐,资质案例售后深度解读 - 品牌鉴赏师
  • 大二寒假实习小结(嵌入式软件开发岗)
  • 别小看一个“偷看”:Peeking Iterator 背后的设计哲学
  • 001 nvm 管理不同版本的 node 与 npm
  • 枚举是实现接口,匿名内部类扩展function实现
  • 藏家必看!北京上门回收老书3家靠谱机构盘点 避坑科普一次说清 - 品牌排行榜单
  • java8 apply 方法与 Function 接口详解
  • Tcache
  • Qt 开发中复制一个已有的 UI 窗体及其对应的 C++ 类
  • 让机器“长眼睛”:产线视觉检测工程如何重塑质量控制逻辑?