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

高校科研平台:Vue3如何扩展百度WebUploader实现实验数据文件夹的目录结构分片秒传与备份?

咱福州网工仔实锤了最近为了毕设焦头烂额——要搞个能打的大文件管理系统还要兼容IE8这种“上古浏览器”学校机房那台Win7IE9的老古董点个按钮都像在玩心跳。找了一圈后端教程不是“自己悟”就是“付费课”现在连后端代码都要自己摸着石头过河……今天先把前端代码整明白至少毕设演示时能“表面光”前端目标用原生JSWebUploader搞定10G上传断点续传文件夹咱一个后端小白后端Python还在啃《笨办法学Python》所以前端必须“能跑能用”——核心就三点兼容老浏览器IE8用FlashIE9用H5龙芯/红莲花这些信创浏览器也能跑。断点续传关浏览器/重启电脑都不怕进度信息存本地localStorage。文件夹上传保留层级结构比如/课程设计/文件管理系统/代码IE8手动输路径凑合用。前端代码Vue3 WebUploader附详细注释先上干货以下是核心代码包含文件选择、分片上传、断点查询、文件夹处理注释写得贼详细小白也能看懂。1. 安装依赖VS Code里操作首先得装WebUploader和加密库AES加密用# 在项目根目录敲命令Vue3用npm或yarn都行npminstallwebuploader crypto-js--save2. 前端组件代码src/components/BigFileUpload.vueimport SparkMD5 from spark-md5; // 计算文件MD5断点续传关键 import WebUploader from webuploader; // 引入WebUploader库 import CryptoJS from crypto-js; // AES加密库传输加密 export default { data() { return { uploader: null, // WebUploader实例 progress: 0, // 上传进度百分比 isUploading: false, // 是否正在上传 currentFile: null, // 当前处理的文件 fileMd5: , // 当前文件的MD5唯一标识用于断点 chunkSize: 2 * 1024 * 1024, // 分片大小2MB10G分5000片 uploadedChunks: [], // 已上传的分片序号从本地localStorage读 encryptKey: user-defined-key-123 // 加密密钥实际项目要让用户输入 }; }, mounted() { this.initUploader(); // 初始化上传组件 }, methods: { // 初始化WebUploader兼容IE8的Flash模式 initUploader() { // 配置WebUploader重点参数注释 this.uploader WebUploader.create({ swf: /static/webuploader/Uploader.swf, // Flash路径IE8必须需提前下载 server: /api/upload/chunk, // 后端分片接收接口Python写的后面说 pick: #filePicker, // 选择文件按钮 dnd: #dndArea, // 拖拽区域 paste: document.body, // 粘贴上传可选 chunked: true, // 开启分片上传大文件必须 chunkSize: this.chunkSize, // 分片大小2MB compress: false, // 不压缩大文件压缩会丢内容 fileNumLimit: 100, // 最多同时传100个文件防崩溃 fileSizeLimit: 10 * 1024 * 1024 * 1024, // 单个文件最大10G accept: { title: All Files, extensions: * // 允许所有格式按需改 }, // 自定义参数传给后端 formData: { encrypt: true, // 告诉后端要加密传输 key: this.encryptKey // 加密密钥实际让用户输入更安全 } }); // 绑定事件文件加入队列时触发计算MD5 this.uploader.on(fileQueued, (file) { this.currentFile file; this.progress 0; this.uploadedChunks []; // 重置已上传分片 this.calculateFileMd5(file); // 计算文件MD5断点续传的核心 }); // 绑定事件分片上传前查询已上传的分片 this.uploader.on(uploadBeforeSend, (obj, data) { data.md5 this.fileMd5; // 传MD5给后端查进度 data.chunk obj.chunk; // 当前分片序号0开始 data.chunks obj.chunks; // 总分片数 }); // 绑定事件上传进度更新实时显示进度条 this.uploader.on(uploadProgress, (file, percentage) { this.progress Math.round(percentage * 100); }); // 绑定事件单个分片上传成功记录已上传分片到localStorage this.uploader.on(uploadSuccess, (file, response) { if (response.code 200) { const { chunk } response.data; this.uploadedChunks.push(chunk); // 记录已上传的分片序号 localStorage.setItem(upload_${this.fileMd5}, JSON.stringify(this.uploadedChunks)); // 存本地防丢失 } }); // 绑定事件全部分片上传完成合并文件 this.uploader.on(uploadFinished, (file) { this.isUploading false; this.$message.success(${file.name} 上传完成); // 清空本地存储的进度可选 localStorage.removeItem(upload_${this.fileMd5}); }); // 绑定事件上传出错提示用户 this.uploader.on(error, (type) { this.isUploading false; let msg ; switch (type) { case F_EXCEED_SIZE: msg 文件超过10G限制; break; case Q_EXCEED_NUM_LIMIT: msg 同时上传的文件太多; break; default: msg 上传失败${type}; } this.$message.error(msg); }); }, // 计算文件MD5断点续传的唯一标识 calculateFileMd5(file) { const blobSlice File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice; const chunks Math.ceil(file.size / this.chunkSize); // 总分片数 const spark new SparkMD5.ArrayBuffer(); const fileReader new FileReader(); // 分片读取文件内容计算MD5大文件可能有点慢耐心等 const loadNext (currentChunk) { const start currentChunk * this.chunkSize; const end Math.min(start this.chunkSize, file.size); fileReader.readAsArrayBuffer(blobSlice.call(file, start, end)); }; fileReader.onload (e) { spark.append(e.target.result); // 累加当前分片内容 const currentChunk Math.floor(e.target.result.byteLength / this.chunkSize); if (currentChunk chunks - 1) { loadNext(currentChunk); } else { this.fileMd5 spark.end(); // 所有分片读完得到最终MD5 this.queryUploadedChunks(); // 查询后端已上传的分片 } }; loadNext(0); // 开始计算 }, // 查询后端已上传的分片从localStorage或后端接口 async queryUploadedChunks() { try { // 先从localStorage找防止关浏览器后进度丢失 const localChunks localStorage.getItem(upload_${this.fileMd5}); if (localChunks) { this.uploadedChunks JSON.parse(localChunks); } else { // 没本地记录调后端接口查Python接口返回已上传的分片序号 const res await this.$http.get(/api/upload/chunks?md5${this.fileMd5}); this.uploadedChunks res.data.uploadedChunks || []; } // 告诉WebUploader跳过已上传的分片关键 this.uploader.options.chunkRetry 0; // 失败不重试已上传的分片跳过 this.uploader.upload(); // 开始上传 } catch (err) { console.error(查询已上传分片失败, err); this.$message.error(获取上传进度失败请重试); } }, // 开始上传 startUpload() { if (!this.currentFile) { this.$message.warning(请先选择文件或文件夹); return; } this.isUploading true; this.uploader.upload(); }, // 暂停上传 pauseUpload() { this.uploader.stop(); this.isUploading false; }, // 清空队列 clearQueue() { this.uploader.clearQueue(); this.progress 0; this.currentFile null; this.uploadedChunks []; } } }; .upload-container { max-width: 800px; margin: 20px auto; padding: 20px; border: 1px solid #eee; border-radius: 8px; } .placeholder { min-height: 150px; border: 2px dashed #ccc; border-radius: 4px; display: flex; flex-direction: column; align-items: center; justify-content: center; cursor: pointer; } .tip { color: #666; font-size: 12px; margin-top: 10px; } .status-bar { margin-top: 15px; } .progress-wrap { margin-bottom: 15px; } .progress-bar { width: 100%; height: 20px; background: #f3f3f3; border-radius: 10px; overflow: hidden; margin: 5px 0; } .progress { height: 100%; background: #409eff; transition: width 0.3s; } .btn-group button { margin-right: 10px; padding: 5px 15px; border: 1px solid #ddd; border-radius: 4px; cursor: pointer; } .btn-group button:disabled { background: #f5f5f5; color: #999; cursor: not-allowed; }代码关键功能说明小白必看兼容IE8靠WebUploader的Flash模式swf文件记得把Uploader.swf放在public/static/webuploader/目录下Vue3默认静态资源路径。断点续传文件加入队列时用SparkMD5计算文件的MD5唯一标识。上传前调用queryUploadedChunks从本地localStorage或后端接口查已上传的分片。WebUploader会自动跳过已上传的分片只传未传的部分。文件夹上传IE9支持webkitdirectory属性WebUploader自动处理拖拽文件夹时会保留层级结构比如/课程设计/文件管理系统。IE8不支持只能手动让用户输入文件夹路径比如在文件名前加课程设计/前缀后端按路径创建文件夹。加密传输前端用CryptoJS.AES.encrypt加密文件内容示例里没写可加在uploadBeforeSend事件里。后端用相同的密钥解密Python代码里实现。毕设演示注意事项保命指南本地测试用Win7虚拟机装IE9测试文件夹上传和断点续传上传到50%时关闭浏览器重新打开继续传。用IE8虚拟机测试Flash上传需允许浏览器运行Flash学校机房可能需要调整安全设置。进度保存关闭浏览器再打开刷新页面看进度是否还在依赖localStorage。大文件测试用10G的测试文件网上找“10G测试文件生成器”看分片上传是否正常有没有内存溢出。求救后端Python怎么搞我现在后端Python还在啃大概思路是用Flask或Django写接口接收分片/api/upload/chunk。把分片存到本地临时目录比如F:/temp_uploads/。查uploadedChunks表或本地文件记录合并分片成完整文件。加密存储用AES解密前端传过来的内容再存到项目目录。有没有Python大佬愿意带带弟弟加群374992201新人有红包群里还有一起学后端的兄弟平时布置作业互相监督毕设答辩前互相调试代码PS老师说“能跑起来就行”但我争取做到“看起来很牛”——毕竟这是大学最后作业了冲就完事了将组件复制到项目中示例中已经包含此目录引入组件配置接口地址接口地址分别对应文件初始化文件数据上传文件进度文件上传完毕文件删除文件夹初始化文件夹删除文件列表参考http://www.ncmem.com/doc/view.aspx?ide1f49f3e1d4742e19135e00bd41fa3de处理事件启动测试启动成功效果数据库效果预览文件上传文件刷新续传支持离线保存文件进度在关闭浏览器刷新浏览器后进行不丢失仍然能够继续上传文件夹上传支持上传文件夹并保留层级结构同样支持进度信息离线保存刷新页面关闭页面重启系统不丢失上传进度。下载示例点击下载完整示例

相关文章:

高校科研平台:Vue3如何扩展百度WebUploader实现实验数据文件夹的目录结构分片秒传与备份?

咱福州网工仔实锤了!最近为了毕设焦头烂额——要搞个能打的大文件管理系统,还要兼容IE8这种“上古浏览器”(学校机房那台Win7IE9的老古董,点个按钮都像在玩心跳)。找了一圈后端教程,不是“自己悟”就是“付…...

从零开始:手把手教你解读文华财经双轨期货指标源码(附博易大师配置)

从零开始:手把手教你解读文华财经双轨期货指标源码(附博易大师配置) 在期货交易中,技术指标是投资者判断市场趋势的重要工具。文华财经双轨期货指标因其直观的多空变色线和波段趋势显示功能,受到许多交易者的青睐。但对…...

DAMO-YOLO模型量化部署:TensorRT加速实战

DAMO-YOLO模型量化部署:TensorRT加速实战 探索如何通过TensorRT量化加速技术,让DAMO-YOLO目标检测模型在保持精度的同时获得显著的速度提升。 1. 开篇:为什么需要量化加速? 在实际的目标检测应用场景中,我们经常遇到这…...

学术写作AI工具合集:9款工具优化开题与降重效率

工具对比排名表格 工具名称 核心功能 突出优势 Aibiye 降AIGC率 适配高校规则,AI痕迹弱化 Aicheck 论文降重 速度快,保留专业术语 Askpaper 论文降重 逻辑完整性好 秘塔写作猫 智能降重 结合语法检查 DeepL 多语言降重 翻译改写灵活 知…...

实测AIVideo:3步生成儿童绘本动画,零基础也能做专业视频

实测AIVideo:3步生成儿童绘本动画,零基础也能做专业视频 1. 为什么选择AIVideo制作儿童绘本动画 1.1 传统动画制作的痛点 制作儿童绘本动画通常需要专业团队协作:脚本编写、分镜设计、角色绘制、动画制作、配音录制、后期剪辑,…...

图解稀疏矩阵存储:从CSR行压缩到CSC列压缩的底层实现原理

图解稀疏矩阵存储:从CSR行压缩到CSC列压缩的底层实现原理 稀疏矩阵处理是现代计算科学中的核心问题之一。当矩阵中超过90%的元素为零时,传统的密集存储方式会浪费大量内存空间和计算资源。本文将深入解析三种主流稀疏矩阵存储格式——COO、CSR和CSC的底层…...

新手必看:5款主流漏洞扫描器横向评测(天镜/Nessus/Appscan/AWVS)

五款主流漏洞扫描器深度横评:从入门到精准选型 第一次接触漏洞扫描工具时,面对琳琅满目的选项总让人无从下手——天镜的国产化适配是否真能替代国际产品?Nessus的家庭版限制会不会影响学习效果?AWVS和Appscan在Web扫描领域究竟谁更…...

解决显存不足:Nunchaku FLUX.1-dev在ComfyUI中的优化部署技巧

解决显存不足:Nunchaku FLUX.1-dev在ComfyUI中的优化部署技巧 你是不是也遇到过这样的场景:好不容易下载了最新的Nunchaku FLUX.1-dev模型,满心欢喜想在ComfyUI里生成一张高清大图,结果点击运行后,命令行无情地弹出一…...

Unity ShaderGraph实战:5分钟搞定动态水面效果(附节点详解)

Unity ShaderGraph实战:5分钟实现动态水面效果 水面效果是游戏开发中常见的视觉元素,从平静的湖泊到汹涌的海洋,不同的水体状态能为场景带来截然不同的氛围。传统的水面着色器编写需要深厚的图形学功底,而Unity的ShaderGraph让这一…...

M5-LoRaWAN库详解:基于ASR6501的LoRaWAN终端开发指南

1. 项目概述 M5-LoRaWAN 是一套面向 M5Stack 硬件生态的 LoRaWAN 协议栈封装库,专为基于 ASR6501 系列通信模组的终端设备设计。该库并非从零实现 LoRaWAN MAC 层协议,而是以 AT 指令集为桥梁,对底层 ASR6501 模组(如 ASR6501S、A…...

Overleaf实战:手把手教你用LaTeX写出漂亮的伪代码(附数塔问题完整示例)

Overleaf与LaTeX伪代码编写实战:从入门到精通 在计算机科学和工程领域的研究中,伪代码是描述算法逻辑的重要工具。它既不像自然语言那样模糊,也不像编程语言那样受语法限制,能够清晰表达算法思想。而LaTeX作为学术界广泛使用的排…...

嵌入式PID控制算法实现与参数整定实战指南

1. PID控制算法的工程实现与参数整定实践1.1 控制问题的本质:滞后效应与系统响应需求在嵌入式硬件控制系统中,PID(比例-积分-微分)算法并非抽象的数学游戏,而是针对物理世界固有特性的工程解法。其核心驱动力源于被控对…...

ROS水下机器人仿真:从零配置带声呐和DVL的ROV(附键盘控制避坑指南)

ROS水下机器人仿真实战:多传感器ROV配置与键盘控制全解析 水下机器人(ROV)仿真一直是机器人开发中极具挑战性的领域,尤其是当我们需要集成多种传感器进行协同工作时。本文将带你从零开始,在Gazebo中配置一个搭载声呐、…...

Wan2.2-T2V-A5B模型服务网络优化:内网穿透与安全访问配置

Wan2.2-T2V-A5B模型服务网络优化:内网穿透与安全访问配置 最近在帮一个朋友的公司部署Wan2.2-T2V-A5B模型,他们想把视频生成服务放在自己的服务器上,但又不想把整个服务器都暴露在公网,怕有安全风险。这其实是个挺常见的需求&…...

Youtu-Parsing学术科研:批量处理论文图片,提取公式表格数据

Youtu-Parsing学术科研:批量处理论文图片,提取公式表格数据 1. 学术研究者的文档处理痛点 在科研工作中,我们经常需要处理大量学术论文和实验数据。传统的手动录入方式存在几个明显问题: 效率低下:一篇10页的论文可…...

SCD4x CO₂传感器Arduino驱动深度解析与嵌入式实践

1. SCD4x CO₂传感器Arduino库深度解析:面向嵌入式工程师的底层驱动实践指南 1.1 库定位与工程价值 SCD4x-CO2库是一个专为ESP系列芯片(尤其是ESP32)设计的轻量级IC设备驱动库,用于对接Sensirion公司推出的SCD40/SCD41系列高精度…...

不用写代码!用Acrobat DC制作可自动计算的智能PDF表单(2024最新版)

2024年Acrobat DC智能PDF表单实战:零代码实现自动计算与动态交互 在数字化转型浪潮中,PDF表单早已超越静态数据收集工具的范畴。最新版Acrobat DC内置的智能引擎,让普通用户无需编写复杂代码也能创建具备商业级计算逻辑的动态表单。想象一下&…...

飞书多维表格API实战:用Dify实现智能票据分类归档系统

飞书多维表格与Dify深度整合:打造企业级智能票据管理中枢 在数字化转型浪潮中,企业财务流程的智能化升级已成为不可逆转的趋势。传统票据处理方式——人工分类、手动录入、Excel归档——不仅效率低下,还容易因疲劳导致数据错误。根据行业调研…...

算法性能建模的数值方法与误差分析的技术7

算法性能建模与数值方法概述定义算法性能建模的目标与范围数值方法在性能建模中的作用常见应用场景(如机器学习、科学计算、优化算法等)性能建模的核心指标时间复杂度与空间复杂度的量化分析实际运行时间与资源占用的测量方法硬件因素(缓存、…...

树莓派玩家必看:如何把8G系统镜像压缩到4G卡上?SD卡扩容备份技巧

树莓派玩家必看:如何把8G系统镜像压缩到4G卡上?SD卡扩容备份技巧 树莓派玩家们一定遇到过这样的困境:手头只有一张4GB的SD卡,但系统镜像却有8GB大小。传统备份方法要求目标卡容量必须大于等于源卡,这让很多小容量卡用…...

MS7200视频转换芯片深度解析:HDMI转RGB/YUV的高效解决方案

1. MS7200芯片:HDMI信号转换的隐形冠军 第一次接触MS7200这颗芯片是在去年帮朋友改造老旧工业显示器的时候。当时需要把HDMI信号转换成RGB接口,市面上常见的转换器要么画质损失严重,要么延迟高得离谱。直到电子市场老板神秘兮兮地从柜台底下摸…...

准静态电磁场在工程应用中的关键特性与实例解析

1. 电准静态场(EQS)的工程密码 第一次接触电准静态场这个概念时,我盯着公式推导看了整整三天。直到在实验室用示波器观察到低频交流电通过平板电容的波形,才真正理解电场无旋性这个抽象概念的实际意义。简单来说,当感应…...

解决Calibre中文路径乱码问题:让电子书管理回归直观

解决Calibre中文路径乱码问题:让电子书管理回归直观 【免费下载链接】calibre-do-not-translate-my-path Switch my calibre library from ascii path to plain Unicode path. 将我的书库从拼音目录切换至非纯英文(中文)命名 项目地址: htt…...

深入剖析jeect-boot积木报表queryFieldBySql接口的RCE漏洞(CVE-2023-4450)

1. 漏洞背景与危害分析 最近在安全圈里闹得沸沸扬扬的jeect-boot积木报表RCE漏洞(CVE-2023-4450),让我想起了去年处理过的类似案例。这个漏洞的核心在于/jmreport/queryFieldBySql接口对用户输入的SQL语句处理不当,导致攻击者可以…...

SQL调优实战:从索引策略到查询优化案例全解析

SQL调优实战:从索引策略到查询优化案例全解析 在数据库性能优化的领域中,SQL调优始终是开发者绕不开的核心话题。无论是互联网高并发场景下的响应延迟,还是企业级系统中复杂报表的生成速度,SQL语句的执行效率直接影响着系统的整体…...

ANSI转义码避坑手册:为什么你的终端颜色显示不正常?

ANSI转义码避坑手册:为什么你的终端颜色显示不正常? 终端里的彩色文字突然变成乱码?精心设计的CLI界面在不同系统上显示效果天差地别?这很可能是ANSI转义码的兼容性问题在作祟。作为开发者日常必备的文本装饰工具,ANSI…...

SQL优化实战:从索引策略到查询性能飞跃的深度解析

SQL优化实战:从索引策略到查询性能飞跃的深度解析 在当今数字化时代,数据已成为企业竞争的核心资产。随着业务量的爆炸式增长,数据库中的数据量也呈现出指数级上升的趋势。如何高效地存储、检索和管理这些数据,成为了数据库管理员…...

Qwen-Image RTX4090D镜像多场景:支持图像安全审查、版权识别、敏感内容过滤

Qwen-Image RTX4090D镜像多场景:支持图像安全审查、版权识别、敏感内容过滤 1. 开箱即用的视觉大模型推理环境 Qwen-Image定制镜像是专为RTX4090D显卡优化的视觉语言模型推理环境。这个预配置的解决方案让开发者能够立即投入工作,无需花费数小时甚至数…...

解密字节内部30+项目都在用的FlowGram:自由布局VS固定布局保姆级选择指南

解密字节内部30项目都在用的FlowGram:自由布局VS固定布局保姆级选择指南 在当今快速迭代的企业级应用开发中,流程可视化工具已成为提升开发效率的关键。作为字节跳动内部广泛采用的流程搭建引擎,FlowGram凭借其灵活的布局模式和强大的扩展能力…...

请解释 Android 中 onTouch 和 onTouchEvent 的区别及其调用顺序是什么?

在 Android 的事件处理机制中,onTouch 和 onTouchEvent 是处理触摸事件的两个核心环节。虽然它们都涉及触摸,但调用时机、所属类、返回值含义以及在事件分发流程中的位置完全不同。 理解它们的区别是解决“点击无效”、“滑动冲突”等常见 Bug 的关键。一…...