机械制造Vue大文件分段上传DEMO?

第一章:毕业设计の终极挑战

"同学,你这毕业设计要做文件管理系统?还要支持10G大文件上传?"导师推了推眼镜,我仿佛看到他头顶飘着"这届学生真难带"的弹幕。

"是的老师!还要兼容IE8!"我拍着胸脯保证,内心OS:现在跑路还来得及吗?

于是我这个网络工程专业的菜鸟,开始了用Vue3+原生JS手搓百度WebUploader的奇幻之旅。毕竟谁让咱学校机房还跑着Windows7+IE9呢?(微软:这锅我不背)


第二章:前端の魔改之路

文件选择器(兼容IE8版)
// 魔改后的文件选择器(支持文件夹)functioncreateFileInput(callback){constinput=document.createElement('input');input.type='file';input.webkitdirectory=true;// Chromeinput.directory=true;// Firefoxinput.multiple=true;// IE8兼容方案(手动选择文件)if(isIE8()){input.onchange=function(){constfiles=[];for(leti=0;i<this.files.length;i++){files.push(this.files[i]);}callback(files);};}else{// 现代浏览器处理文件夹input.onchange=function(){constfiles=[];constwalkFiles=(entry)=>{if(entry.isFile){entry.file(file=>files.push(file));}elseif(entry.isDirectory){constreader=entry.createReader();reader.readEntries(entries=>{entries.forEach(walkFiles);});}};if(this.files){// 非IE的直接获取Array.from(this.files).forEach(file=>files.push(file));}else{// WebKit API处理constitems=this.webkitEntries;items.forEach(walkFiles);}callback(files);};}input.click();}
断点续传核心(LocalStorage版)
// 进度存储管理器(兼容所有浏览器)classUploadProgressManager{constructor(){this.storageKey='file_upload_progress';this.progressData=this.loadProgress();}loadProgress(){try{constdata=localStorage.getItem(this.storageKey);returndata?JSON.parse(data):{};}catch(e){console.error('LocalStorage error:',e);return{};}}saveProgress(fileId,chunkIndex,uploadedSize){if(!this.progressData[fileId]){this.progressData[fileId]={};}this.progressData[fileId][chunkIndex]=uploadedSize;try{// 分片存储防止超过5MB限制constchunkSize=1000;// 每个存储项最多1000个分片constkeys=Object.keys(this.progressData[fileId]);for(leti=0;i<keys.length;i+=chunkSize){constchunk=keys.slice(i,i+chunkSize);constchunkData={};chunk.forEach(k=>{chunkData[k]=this.progressData[fileId][k];});localStorage.setItem(`${this.storageKey}_${fileId}_${Math.floor(i/chunkSize)}`,JSON.stringify(chunkData));}}catch(e){console.error('Progress save failed:',e);}}// 其他方法省略...(实际代码有完整实现)}

第三章:后端のPython救赎

Flask分片接收接口
fromflaskimportFlask,request,jsonifyimportosfromCrypto.CipherimportAESimportbase64 app=Flask(__name__)UPLOAD_FOLDER='/tmp/uploads'SECRET_KEY=b'ThisIsASecretKey123'# 生产环境请使用更安全的密钥# 文件分片处理@app.route('/upload',methods=['POST'])defupload_chunk():file_id=request.form['fileId']chunk_index=int(request.form['chunkIndex'])total_chunks=int(request.form['totalChunks'])file_name=request.form['fileName']# 解密文件内容(前端加密后传输)encrypted_data=request.files['file'].read()cipher=AES.new(SECRET_KEY,AES.MODE_EAX)nonce=encrypted_data[:16]ciphertext=encrypted_data[16:-16]tag=encrypted_data[-16:]decrypted=cipher.decrypt_and_verify(ciphertext,tag)# 保存分片chunk_path=os.path.join(UPLOAD_FOLDER,f"{file_id}.part{chunk_index}")withopen(chunk_path,'wb')asf:f.write(decrypted)# 如果是最后一个分片,合并文件ifchunk_index==total_chunks-1:merge_file(file_id,total_chunks,file_name)returnjsonify({'status':'success'})defmerge_file(file_id,total_chunks,file_name):final_path=os.path.join(UPLOAD_FOLDER,file_name)withopen(final_path,'wb')asoutfile:foriinrange(total_chunks):chunk_path=os.path.join(UPLOAD_FOLDER,f"{file_id}.part{i}")withopen(chunk_path,'rb')asinfile:outfile.write(infile.read())os.remove(chunk_path)# 这里可以添加阿里云OSS上传代码# upload_to_oss(final_path, file_name)

第四章:兼容性の血泪史

  1. IE8的绝望

    • 发现FileReader不支持?改用Flash方案
    • 没有Promise?手动实现简易版
    • XMLHttpRequest没有onload?用onreadystatechange
  2. 文件夹结构保留

    // 构建文件路径树functionbuildFileTree(files){consttree={};files.forEach(file=>{constpathParts=file.webkitRelativePath?file.webkitRelativePath.split('/'):[file.name];// IE fallbackletcurrent=tree;pathParts.forEach((part,i)=>{if(!current[part]){current[part]=i===pathParts.length-1?file:{__isDir:true};}current=current[part];});});returntree;}

第五章:最终成果展示

经过3个月的奋战(和无数杯咖啡),我的"超级文件管理系统"终于诞生了!

核心功能

  • ✅ 10G文件秒传(分片上传)
  • ✅ 浏览器关闭后进度不丢失(LocalStorage+IndexedDB双保险)
  • ✅ 文件夹上传保留完整结构
  • ✅ AES-256加密传输+存储
  • ✅ 兼容IE8到Chrome120全系列
  • ✅ 后端Python实现断点续传

演示效果

// 前端调用示例constuploader=newFileUploader({server:'/upload',chunkSize:5*1024*1024,// 5MB分片encrypt:true,onProgress:(percent)=>{console.log(`上传进度:${percent}%`);}});// 上传整个文件夹document.getElementById('uploadBtn').onclick=()=>{createFileInput((files)=>{constfileTree=buildFileTree(files);uploader.uploadTree(fileTree);});};

第六章:求职の逆袭

现在这个项目已经成为我的求职神器:

  • 面试官:“请描述你遇到的最大技术挑战”
  • 我:“老师,您听说过IE8兼容大文件上传吗?”

求职福利
加入我们的QQ群:374992201,不仅可以:

  1. 免费获取完整源代码
  2. 获得7*24小时技术支持
  3. 参与红包雨活动(最高99元)
  4. 推荐工作机会(师兄师姐都在群里)

PS:群文件里有《IE8兼容性终极指南》和《大文件上传避坑手册》,都是我用头发换来的经验啊!

(最后弱弱地问:有HR大佬在看吗?招前端开发吗?会写IE8兼容代码的那种…)

将组件复制到项目中

示例中已经包含此目录

引入组件

配置接口地址

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

处理事件

启动测试

启动成功

效果

数据库

效果预览

文件上传

文件刷新续传

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

文件夹上传

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

批量下载

支持文件批量下载

下载续传

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

文件夹下载

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

下载示例

点击下载完整示例

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

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

相关文章

探讨揭阳不锈钢丝个性化定制,实力供应商哪家品牌更值得选

本榜单依托全维度市场调研与真实行业口碑,深度筛选出五家标杆企业,为企业选型提供客观依据,助力精准匹配适配的不锈钢丝服务伙伴。 TOP1 推荐:广东昕隆贸易有限公司 推荐指数:★★★★★ | 口碑评分:国内领先的不…

从0开始学AI抠图:科哥开发的WebUI工具太友好了

从0开始学AI抠图&#xff1a;科哥开发的WebUI工具太友好了 1. 为什么说这是小白最该试试的抠图工具&#xff1f; 你有没有过这样的经历&#xff1a; 想给一张人像换背景&#xff0c;打开Photoshop&#xff0c;光是找“选择主体”功能就花了三分钟&#xff1b; 想批量处理几十…

调整DIFY回复节点中背景颜色的方法

在 DIFY 的回复节点中调整背景颜色为白色&#xff1a; 方法一&#xff1a;直接修改内联样式 如果你可以直接编辑 HTML 元素的内联样式&#xff0c;添加 background-color: white; 即可&#xff1a; <div class"reply-node" style"background-color: white…

Vue 常用的调试启动命令和编译命令

在 Vue 项目里&#xff0c;常用的调试启动命令和编译命令如下&#xff1a;开发环境调试启动要是你用的是 Vue CLI 创建的项目&#xff0c;可在项目根目录下运行下面的命令来启动开发服务器&#xff1a;npm run serve执行该命令后&#xff0c;项目会进入热更新模式&#xff0c;只…

当 AI 遇上医疗:英伟达 10 亿美元合作,真能让看病变简单?

2026 年初&#xff0c;英伟达与礼来的 10 亿美元 AI 联合创新实验室官宣&#xff0c;让 “AI 重塑医疗” 从概念走向实质性落地。这场横跨五年的跨界合作&#xff0c;不仅聚焦药物研发的效率革命&#xff0c;更在医疗全链条埋下了 “简化诊疗” 的种子。当顶尖 AI 算力遇上深耕…

支持拖拽上传!这个图像修复系统的交互太贴心了

支持拖拽上传&#xff01;这个图像修复系统的交互太贴心了 你有没有试过修一张图&#xff0c;结果卡在第一步——怎么把图片传上去&#xff1f;点开、找文件、选中、确认……光上传就折腾半分钟。更别说还要调参数、等加载、看报错。直到我遇到这个由科哥二次开发的图像修复系…

小白也能懂的YOLOv13入门指南:一键启动实时检测

小白也能懂的YOLOv13入门指南&#xff1a;一键启动实时检测 你有没有试过——刚下载好目标检测代码&#xff0c;还没开始跑&#xff0c;就卡在了“ImportError: No module named torch”&#xff1f;或者好不容易配好环境&#xff0c;换台机器又得重来一遍&#xff1f;更别说那…

YOLOv12镜像实战应用:快速搭建自动驾驶感知系统

YOLOv12镜像实战应用&#xff1a;快速搭建自动驾驶感知系统 在智能汽车昼夜不息地穿行于城市街巷的今天&#xff0c;真正决定其安全边界的&#xff0c;不是最炫酷的座舱交互&#xff0c;而是那一毫秒内能否准确识别斑马线上的行人、突然窜出的电动车、被遮挡的交通标志——实时…

YOLOE vs YOLO-Worldv2:实测性能差距有多大?

YOLOE vs YOLO-Worldv2&#xff1a;实测性能差距有多大&#xff1f; 1. 开篇直击&#xff1a;为什么这次对比值得你花5分钟看完 你有没有遇到过这样的场景&#xff1a; 项目刚启动&#xff0c;团队在争论该选哪个开放词汇检测模型——YOLO-Worldv2看着文档很成熟&#xff0c;…

10大最佳AIGC降重平台排名:免费与付费方案性能与价格全面对比

&#xfffd;&#xfffd; 10大降AIGC平台核心对比速览 排名 工具名称 降AIGC效率 适用场景 免费/付费 1 askpaper ⭐⭐⭐⭐⭐ 学术论文精准降AI 付费 2 秒篇 ⭐⭐⭐⭐⭐ 快速降AIGC降重 付费 3 Aibiye ⭐⭐⭐⭐ 多学科论文降AI 付费 4 Aicheck ⭐⭐⭐⭐…

降低AIGC重复率的10大最佳网站排名:免费与付费方案深度分析

&#xfffd;&#xfffd; 10大降AIGC平台核心对比速览 排名 工具名称 降AIGC效率 适用场景 免费/付费 1 askpaper ⭐⭐⭐⭐⭐ 学术论文精准降AI 付费 2 秒篇 ⭐⭐⭐⭐⭐ 快速降AIGC降重 付费 3 Aibiye ⭐⭐⭐⭐ 多学科论文降AI 付费 4 Aicheck ⭐⭐⭐⭐…

精选降低AIGC重复率的实用工具:10款主流平台免费与付费功能对比

&#xfffd;&#xfffd; 10大降AIGC平台核心对比速览 排名 工具名称 降AIGC效率 适用场景 免费/付费 1 askpaper ⭐⭐⭐⭐⭐ 学术论文精准降AI 付费 2 秒篇 ⭐⭐⭐⭐⭐ 快速降AIGC降重 付费 3 Aibiye ⭐⭐⭐⭐ 多学科论文降AI 付费 4 Aicheck ⭐⭐⭐⭐…

学霸同款2026自考论文工具TOP8:一键生成论文工具深度测评

学霸同款2026自考论文工具TOP8&#xff1a;一键生成论文工具深度测评 2026年自考论文工具测评&#xff1a;为何值得一看&#xff1f; 随着自考人数逐年攀升&#xff0c;论文写作成为众多考生面临的“硬门槛”。面对选题困难、资料查找繁琐、格式规范不熟悉等问题&#xff0c;一…

如何降低AIGC率?全球10大最佳平台排名及免费付费方案对比

&#xfffd;&#xfffd; 10大降AIGC平台核心对比速览 排名 工具名称 降AIGC效率 适用场景 免费/付费 1 askpaper ⭐⭐⭐⭐⭐ 学术论文精准降AI 付费 2 秒篇 ⭐⭐⭐⭐⭐ 快速降AIGC降重 付费 3 Aibiye ⭐⭐⭐⭐ 多学科论文降AI 付费 4 Aicheck ⭐⭐⭐⭐…

高效降低AIGC重复率的10大最佳网站排名:免费与付费方案完整解析

&#xfffd;&#xfffd; 10大降AIGC平台核心对比速览 排名 工具名称 降AIGC效率 适用场景 免费/付费 1 askpaper ⭐⭐⭐⭐⭐ 学术论文精准降AI 付费 2 秒篇 ⭐⭐⭐⭐⭐ 快速降AIGC降重 付费 3 Aibiye ⭐⭐⭐⭐ 多学科论文降AI 付费 4 Aicheck ⭐⭐⭐⭐…

全球10大最佳AIGC降重网站排名:免费与付费方案全面对比分析

&#xfffd;&#xfffd; 10大降AIGC平台核心对比速览 排名 工具名称 降AIGC效率 适用场景 免费/付费 1 askpaper ⭐⭐⭐⭐⭐ 学术论文精准降AI 付费 2 秒篇 ⭐⭐⭐⭐⭐ 快速降AIGC降重 付费 3 Aibiye ⭐⭐⭐⭐ 多学科论文降AI 付费 4 Aicheck ⭐⭐⭐⭐…

降低AIGC重复率的10大最佳工具排名:免费与付费方案优缺点解析

&#xfffd;&#xfffd; 10大降AIGC平台核心对比速览 排名 工具名称 降AIGC效率 适用场景 免费/付费 1 askpaper ⭐⭐⭐⭐⭐ 学术论文精准降AI 付费 2 秒篇 ⭐⭐⭐⭐⭐ 快速降AIGC降重 付费 3 Aibiye ⭐⭐⭐⭐ 多学科论文降AI 付费 4 Aicheck ⭐⭐⭐⭐…

Z-Image-Turbo_UI界面工作流说明,整合多位作者精华

Z-Image-Turbo_UI界面工作流说明&#xff1a;整合多位作者精华&#xff0c;开箱即用的本地图像生成方案 Z-Image-Turbo、UI界面操作、文生图/图生图、高清修复、图片放大、LoRA加载、8G显存友好、Gradio界面、本地离线部署、一键启动、历史管理 作为长期在本地跑AI图像模型的实…

SpringBoot+Vue 社区医院管理系统平台完整项目源码+SQL脚本+接口文档【Java Web毕设】

摘要 随着医疗信息化建设的不断推进&#xff0c;社区医院作为基层医疗服务的重要载体&#xff0c;亟需通过数字化手段提升管理效率和服务质量。传统社区医院管理多依赖手工操作和纸质记录&#xff0c;存在信息孤岛、数据冗余、查询效率低下等问题&#xff0c;难以满足现代医疗服…

无需配置!YOLOv9官方镜像直接运行detect脚本

无需配置&#xff01;YOLOv9官方镜像直接运行detect脚本 你是否经历过这样的深夜&#xff1a;显卡风扇狂转&#xff0c;conda环境反复崩溃&#xff0c;pip install报错堆成山&#xff0c;就为了跑通一行python detect.py&#xff1f;当你终于在第7次重装CUDA后看到检测框跃然图…