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

航空航天需求:Vue3如何扩展WebUploader支持三维模型文件的分片校验?

网工大三党文件上传救星原生JS实现10G大文件上传Vue3IE8兼容兄弟作为刚入坑网络工程的山西老狗我太懂你现在的处境了——老师要10G大文件上传的毕业设计网上找的代码全是“断头路”后端还没学会前端又被兼容性卡脖子。别慌我熬了两周啃下的原生JSVue3前端全栈方案今天全盘托出保证你能直接拿给老师演示答辩时被夸“这届学生有点东西”一、方案核心专治新手村“上传难题”1. 功能全覆盖老师看了直点头10G级文件传输分片上传5MB/片断点续传localStorage缓存进度关浏览器/重启电脑不丢。文件夹层级保留递归遍历文件树前端生成相对路径后端按/文件夹/子文件路径存储IE8用“伪路径元数据”方案兜底。加密传输前端AES-256加密分片密钥动态生成后端可无缝对接SM4国密存储满足老师“安全要求”。全浏览器兼容IE8XHR2File API补丁→ Chrome/Firefox/Edge → 信创浏览器龙芯/红莲花。2. 新手友好0后端压力纯前端实现分片、加密、断点续传全在前端搞定后端只需“接收分片合并”Python/PHP/Java都能接。代码注释拉满关键步骤加注释遇到问题直接搜“注释关键词”就能解决。本地调试友好文件存F盘无需服务器用localhost就能跑通全流程。3. 学习价值高面试加分项原生JS实战不用依赖Vue/React框架直接操作DOM和浏览器API面试官问“原生JS实现上传”直接秀代码。加密算法实践手把手教你用crypto-js实现AES加密简历里写“熟悉国密算法”不是梦。兼容性调优IE8补丁、localStorage容量优化这些“边角料”是区分初级/中级程序员的关键。二、前端核心代码Vue3原生JS附详细注释1. 文件夹上传组件支持IE8信创浏览器// 兼容IE8的polyfill必须引入 import es6-promise/auto; // 补Promise import whatwg-fetch; // 补fetch if (!window.console) window.console { log: () {}, error: () {} }; // 补console // 依赖库需手动安装npm install crypto-js axios spark-md5 import CryptoJS from crypto-js; import axios from axios; import SparkMD5 from spark-md5; export default { data() { return { uploadTasks: [], // 上传任务列表核心数据 chunkSize: 5 * 1024 * 1024, // 5MB分片兼容IE8内存限制 aesKey: , // AES密钥动态生成后端可替换 currentTaskId: , // 当前上传任务的ID isUploading: false // 全局上传状态锁 }; }, mounted() { this.initAesKey(); // 初始化AES密钥首次加载时生成 this.checkResumeTasks(); // 启动时检查本地是否有未完成的任务 }, methods: { /** * 初始化AES密钥动态生成32位随机字符串 * 注意实际项目中密钥应从后端获取这里简化为前端生成 */ initAesKey() { const chars ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789; let key ; for (let i 0; i 32; i) { key chars.charAt(Math.floor(Math.random() * chars.length)); } this.aesKey key; console.log(当前AES密钥:, key); // 调试用实际需隐藏 }, /** * 触发文件选择现代浏览器选文件/文件夹 */ selectFolder() { this.$refs.fileInput.click(); }, /** * 处理文件选择兼容IE8 * param {Event} e 文件选择事件 */ handleFileSelect(e) { const files e.target.files; if (!files.length) return; // 生成唯一任务ID时间戳随机数避免重复 this.currentTaskId upload_${Date.now()}_${Math.random().toString(36).substr(2, 6)}; // 遍历文件生成上传任务IE8用伪路径 const newTasks Array.from(files).map(file ({ taskId: this.currentTaskId, fileName: file.name, // 文件名 filePath: this.getFilePath(file), // 文件路径含层级结构 totalSize: file.size, // 文件总大小 uploadedSize: 0, // 已上传大小 progress: 0, // 上传进度0-100 status: pending, // 状态pending/resuming/uploading/failed/success statusText: 等待上传, chunkIndex: 0, // 当前分片索引从0开始 totalChunks: Math.ceil(file.size / this.chunkSize), // 总分片数 file: file // 保留文件对象用于分片读取 })); this.uploadTasks newTasks; this.startUpload(newTasks[0]); // 自动开始第一个任务 }, /** * 上传下一个分片递归 * param {Object} task 当前上传任务 */ uploadNextChunk(task) { if (task.chunkIndex task.totalChunks) { // 所有分片上传完成 task.progress 100; task.status success; task.statusText 上传成功; this.isUploading false; localStorage.removeItem(upload_${task.taskId}); // 清除本地缓存 this.$message.success(${task.fileName} 上传完成); return; } // 计算当前分片的起始和结束位置 const start task.chunkIndex * this.chunkSize; const end Math.min(start this.chunkSize, task.totalSize); const chunk task.file.slice(start, end); // IE8支持File.slice // 读取分片内容并加密原生JS实现 const reader new FileReader(); reader.onload (function(chunk, task) { return function(e) { const chunkContent e.target.result; // AES加密分片密钥与后端一致 const encryptedChunk CryptoJS.AES.encrypt( CryptoJS.lib.WordArray.create(chunkContent), this.aesKey, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 } ).toString(); // 构造FormData兼容IE8 const formData new FormData(); formData.append(taskId, task.taskId); formData.append(chunkIndex, task.chunkIndex); formData.append(totalChunks, task.totalChunks); formData.append(filePath, task.filePath); formData.append(chunk, new Blob([encryptedChunk])); // 调用后端上传接口Python/PHP/Java均可 axios.post(/api/upload/chunk, formData, { headers: { Content-Type: multipart/form-data }, onUploadProgress: (e) { if (e.lengthComputable) { // 计算实时上传速度KB/s const timeDiff e.timeStamp - (task.lastTime || Date.now()); const speed (e.loaded - task.uploadedSize) / (timeDiff || 1) / 1024; task.speed speed.toFixed(2); task.lastTime e.timeStamp; // 更新进度 task.uploadedSize e.loaded; task.progress Math.round((task.uploadedSize / task.totalSize) * 100); } } }).then((res) { // 分片上传成功更新状态 task.chunkIndex; task.status uploading; task.statusText 上传中${task.chunkIndex}/${task.totalChunks}; this.uploadNextChunk(task); // 递归上传下一个分片 }).catch((err) { // 上传失败标记状态 task.status failed; task.statusText 上传失败${err.response?.data?.msg || 网络错误}; this.isUploading false; }); }.bind(this); })(chunk, task); reader.readAsArrayBuffer(chunk); // 读取分片为ArrayBuffer加密需要 }, } };三、新手必看代码调试与避坑指南1. 兼容IE8的关键操作血泪经验引入polyfill必须引入es6-promise和whatwg-fetch否则IE8不支持Promise和fetch。File API补丁IE8不支持File.slice需手动引入Blob.jshttps://github.com/eligrey/Blob.js并在代码中替换file.slice为Blob.js的方法。localStorage容量IE8的localStorage容量限制为5MB大文件进度需分块存储代码中已用taskId分key存储。2. 分片上传的核心逻辑面试必问分片大小选5MB是因为IE8内存限制太大可能导致浏览器崩溃太小会增加请求次数。断点续传通过localStorage缓存已上传的分片索引和大小重启后从该位置继续上传。加密传输前端用AES加密分片后端收到后解密再存储密钥需前后端一致实际项目中建议后端生成密钥。3. 文件夹层级保留老师最关注路径生成现代浏览器用file.webkitRelativePath获取相对路径IE8用随机生成的文件夹名兜底需用户手动输入文件夹名这里简化为随机字符串。后端存储后端按filePath字段创建目录结构如/upload_123/folder_456/file.txt确保文件层级不变。四、找工作学习资源师兄的血泪经验1. 毕业设计答辩技巧重点讲兼容性现场演示IE8上传提前装好IE8虚拟机展示“关闭浏览器→重新打开→继续上传”的全流程。强调加密功能演示加密分片的生成和解密用console.log打印加密前后的数据。突出学习价值说明“原生JS实现”是为了深入理解上传原理而不是为了“炫技”。2. 学习资源推荐MDN文档查File API、FormData、localStorage的兼容性https://developer.mozilla.org/。crypto-js文档学AES加密的使用https://github.com/brix/crypto-js。Vue3官方文档补Vue3的基础语法https://cn.vuejs.org/。3. 群里资源QQ群374992201新人红包加群即送1~99元红包手慢无。作业互助群里每天布置小作业如“实现一个文件选择按钮”学长学姐在线批改。内推机会群里有200软工/网络工程专业的学长实习/校招内推优先。兄弟这套代码你拿去练手保证答辩时老师竖大拇指有问题直接甩日志到群里老狗我24小时在线帮你改。记住不会就查文档卡壳就问群友——咱网工学子不能输将组件复制到项目中示例中已经包含此目录引入组件配置接口地址接口地址分别对应文件初始化文件数据上传文件进度文件上传完毕文件删除文件夹初始化文件夹删除文件列表参考http://www.ncmem.com/doc/view.aspx?ide1f49f3e1d4742e19135e00bd41fa3de处理事件启动测试启动成功效果数据库效果预览文件上传文件刷新续传支持离线保存文件进度在关闭浏览器刷新浏览器后进行不丢失仍然能够继续上传文件夹上传支持上传文件夹并保留层级结构同样支持进度信息离线保存刷新页面关闭页面重启系统不丢失上传进度。下载示例点击下载完整示例

相关文章:

航空航天需求:Vue3如何扩展WebUploader支持三维模型文件的分片校验?

网工大三党文件上传救星:原生JS实现10G大文件上传(Vue3IE8兼容) 兄弟,作为刚入坑网络工程的山西老狗,我太懂你现在的处境了——老师要10G大文件上传的毕业设计,网上找的代码全是“断头路”,后端…...

告别手动描点:WebPlotDigitizer让图像数据提取效率提升10倍的实战指南

告别手动描点:WebPlotDigitizer让图像数据提取效率提升10倍的实战指南 【免费下载链接】WebPlotDigitizer Computer vision assisted tool to extract numerical data from plot images. 项目地址: https://gitcode.com/gh_mirrors/web/WebPlotDigitizer 在科…...

拥有资产,而非出售时间:这才是致富的唯一捷径!

一、财富与赚钱1. 财富不是钱,而是能在你不工作时仍然赚钱的资产。 解释:真正的财富是股票、公司股权、知识产权、软件等可以持续产生价值的东西,而不是一次性的工资收入。2. 想致富就要拥有股权,而不是只出售时间。 解释&#xf…...

夜话测试管理:一位测试负责人的深夜思考与破局之道

关注 霍格沃兹测试学院公众号,回复「资料」, 领取人工智能测试开发技术合集深夜时分,当大多数人已进入梦乡,一位测试负责人却仍在为团队面临的诸多挑战而思索。在霍格沃兹测试开发学社的私教服务中,这样的深夜对话并不少见。今晚&…...

Horos医疗影像平台:开源解决方案的技术解析与应用指南

Horos医疗影像平台:开源解决方案的技术解析与应用指南 【免费下载链接】horos Horos™ is a free, open source medical image viewer. The goal of the Horos Project is to develop a fully functional, 64-bit medical image viewer for OS X. Horos is based up…...

XHS-Downloader:赋能创作者的小红书无水印素材获取工具

XHS-Downloader:赋能创作者的小红书无水印素材获取工具 【免费下载链接】XHS-Downloader 免费;轻量;开源,基于 AIOHTTP 模块实现的小红书图文/视频作品采集工具 项目地址: https://gitcode.com/gh_mirrors/xh/XHS-Downloader …...

OpenCore兼容性指南与配置攻略

OpenCore兼容性指南与配置攻略 【免费下载链接】OpenCore-Install-Guide Repo for the OpenCore Install Guide 项目地址: https://gitcode.com/gh_mirrors/op/OpenCore-Install-Guide OpenCore作为当前最先进的macOS引导工具,为Hackintosh爱好者提供了强大的…...

AMD Ryzen处理器深度优化:SMUDebugTool技术突破与系统级调试指南

AMD Ryzen处理器深度优化:SMUDebugTool技术突破与系统级调试指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: …...

零基础Degrees of Lewdity中文本地化避坑指南:开源项目本地化完整教程

零基础Degrees of Lewdity中文本地化避坑指南:开源项目本地化完整教程 【免费下载链接】Degrees-of-Lewdity-Chinese-Localization Degrees of Lewdity 游戏的授权中文社区本地化版本 项目地址: https://gitcode.com/gh_mirrors/de/Degrees-of-Lewdity-Chinese-Lo…...

## 06|测试不是负担:Pytest 驱动的回归防线搭建

06|测试不是负担:Pytest 驱动的回归防线搭建 文章目录 06|测试不是负担:Pytest 驱动的回归防线搭建 摘要 SEO 摘要 目录 先测什么 Pytest 三种高性价比用法 代码示例 门禁策略 指标对比示例 结尾互动问题 测试体系流程图 深度重构:为什么“写了测试”仍然挡不住事故 提升测…...

推进可再生能源高效利用,构建碳捕集联合电转气微网实现低碳优化运行

摘要:推进可再生能源高效利用,实现电力系统低碳化运行成为电力系统改革的重要方向。 该文首先构建了包含电热气多能协同的微电网模型,考虑了含有碳配额和碳交易的优化运行机制,并在热电联产机组模型中改进加入了碳捕集系统和电转气…...

任何网站,都能变成你的数据来源

Bright Data 亮数据 Scraper Studio 已上线 在这个数据驱动的时代,谁能更快、更稳地获取数据,谁就掌握竞争主动权。 但现实是—— ❌ 网站结构频繁变化,爬虫代码随时"崩" ❌ 反爬机制越来越复杂,维护成本居高不下 ❌…...

《创业之路》-896- 以结构化思维、系统化思维、抽象思维、产品思维、用户思维解决跨多领域复杂技术难题

作为一个擅长结构化、系统化、抽象化、产品化和用户化思维的技术专家,解决跨领域复杂难题不仅仅是“修好一个Bug”,而是一场从微观代码到宏观商业价值的全链路认知跃迁。这五种思维不是孤立的,它们构成了一个解决问题的完整闭环:结…...

FRDM-MCXA346 开发板简介与 VS Code 开发环境搭建指南

FRDM-MCXA346 开发板简介与 VS Code 开发环境搭建指南 本教程旨在帮助初学者快速上手 NXP MCX A 系列微控制器,通过 VS Code 配合 MCUXpresso 扩展插件,完成从环境搭建到代码运行的全过程。 一、 走进 MCX A 系列与 FRDM-MCXA346 1.1 MCX A 系列概述 …...

OpenShift CLI (oc)客户端安装以及常用命令

oc 是 OpenShift 的命令行客户端,基于 Kubernetes 的 kubectl 构建,并扩展了许多 OpenShift 特有的功能(如构建、部署配置、路由、镜像流等)。无论你是开发人员还是集群管理员,oc 都是与 OpenShift 交互的核心工具 1.…...

深度解析:如何利用Gemini百万级长上下文处理复杂文档?技术原理与实战指南

在众多AI模型中,Gemini 1.5 Pro的百万级上下文窗口堪称技术突破。这项能力让AI从“对话工具”跃升为“深度分析师”。本文将从技术原理入手,结合实战案例,拆解如何利用这一能力处理长篇文档、复杂财报、代码库等任务,并介绍国内用…...

鹤岗朋友圈广告投放

在当今数字化时代,朋友圈广告成为了企业营销的重要手段之一,鹤岗地区也不例外。今天咱们就来聊聊鹤岗朋友圈广告投放那些事儿,同时看看长春央企贝力公司在其中能发挥怎样的作用。鹤岗朋友圈广告投放现状行业报告显示,近年来鹤岗地…...

关于 git

修改远程仓库的URL&#xff1a;git remote set-url origin <新仓库地址>...

资源加速通道:百度网盘高效下载解决方案与实践指南

资源加速通道&#xff1a;百度网盘高效下载解决方案与实践指南 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 在数字化协作日益频繁的今天&#xff0c;云存储服务已成为信息传…...

解锁3大核心优势:GHelper华硕ROG笔记本优化工具完全指南

解锁3大核心优势&#xff1a;GHelper华硕ROG笔记本优化工具完全指南 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地…...

直链提取技术:突破网盘限制的高效文件获取方案

直链提取技术&#xff1a;突破网盘限制的高效文件获取方案 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 在数字化协作时代&#xff0c;文件传输效率直接影响工作节奏。百度网…...

3倍效率提升:哔哩下载姬让B站视频获取成本降低67%的全场景解决方案

3倍效率提升&#xff1a;哔哩下载姬让B站视频获取成本降低67%的全场景解决方案 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去…...

ComfyUI-VideoHelperSuite:AI视频工作流的效率革命与实践指南

ComfyUI-VideoHelperSuite&#xff1a;AI视频工作流的效率革命与实践指南 【免费下载链接】ComfyUI-VideoHelperSuite Nodes related to video workflows 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-VideoHelperSuite 内容导航图 核心价值 ├── 用户痛点解…...

构建个人游戏串流中心:Sunshine技术解析与实践指南

构建个人游戏串流中心&#xff1a;Sunshine技术解析与实践指南 【免费下载链接】Sunshine Sunshine: Sunshine是一个自托管的游戏流媒体服务器&#xff0c;支持通过Moonlight在各种设备上进行低延迟的游戏串流。 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine …...

3.13复试四道

1.这一题总体上是很简单的&#xff0c;但是一定要知道怎么找最大公约数//求最大公约数的函数int gcd(int a,int d){while(b){int ta%b;ab;bt;}return a;}1.做了巨久&#xff0c;主要是要分析规则的边界条件&#xff0c;实际就是到了11或21分后&#xff0c;分差大于等于2就结束一…...

喜报 | 技术创新与国际合规双突破!博睿数据再筑核心竞争力护城河

近日&#xff0c;博睿数据三项自主研发核心技术正式获得国家发明专利授权&#xff0c;同时顺利通过五大 ISO 国际标准体系认证。此次技术与合规领域的双突破&#xff0c;既是对博睿数据持续深耕自主创新、筑牢技术壁垒的权威认可&#xff0c;也标志着公司在企业管理、信息安全、…...

告别“直觉编程”:OpenSpec 规范驱动开发 (SDD) 工作流完全指南

在 AI 辅助编程时代&#xff0c;我们常常面临一个痛点&#xff1a;当你让 AI 开发一个复杂功能时&#xff0c;它一开始表现得很聪明&#xff0c;但随着对话轮数的增加&#xff0c;它开始遗忘上下文、偏离需求&#xff0c;最终陷入胡乱猜测的**“直觉编程” (Vibe Coding)** 陷阱…...

B2B案例资产化方法:把“客户成功”写成可复制的信任资产(附六段复盘模板)

先给结论&#xff1a;B2B案例要想真正带动下一单&#xff0c;重点不是把项目过程写全&#xff0c;而是把“客户为什么敢用你”写清楚。这意味着案例写作要从“成果展示”升级为“决策机制复盘”。【定义】B2B案例资产化&#xff0c;是指把客户为什么敢选、如何内部推进、如何验…...

Linux内核态与用户态

Linux内核态与用户态 一、特权级别架构基础 现代x86-64架构&#xff08;Linux 5.15-6.2内核&#xff09;实现了四级特权环&#xff08;Ring 0-3&#xff09;&#xff0c;但Linux仅使用其中两个关键级别&#xff1a;Ring 0&#xff08;内核态&#xff09;&#xff1a; 完全硬件访…...

基于用户行为的动态标签与SOP触发引擎

一、问题背景技术背景说明教育私域运营中&#xff0c;用户从加好友到正价课成交通常经历多个阶段&#xff1a;兴趣期→咨询期→试听期→犹豫期→成交期。每个阶段需要不同的运营策略。例如&#xff1a;咨询3次未购买 → 标记“高意向-未转化”并推送限时优惠试听完成3天未购课 …...