百度免费上传组件怎么结合Vue做大文件上传DEMO?

前端程序员外包项目救星:原生JS大文件上传组件(Vue3实现)

兄弟,作为在杭州接外包的老前端程序员,太懂你现在的处境了——甲方要20G大文件上传,还要兼容IE9,预算卡得死死的,网上代码全是“断头路”,出了问题连个问的人都没有。别慌!我去年接了个类似项目,熬了三个月啃下的原生JS+Vue3全栈方案,今天全盘托出,保证你能直接拿给客户演示,合同签得比隔壁老王还快!


一、方案核心(专治甲方“奇葩需求”)

1. 功能全覆盖(甲方看了直点头)

  • 20G级大文件传输:分片上传(5MB/片),断点续传(后端存进度,关浏览器/重启电脑不丢)。
  • 文件夹层级保留:递归遍历文件系统,后端按/文件夹/子文件路径存储(IE9用“伪路径+元数据”方案兜底)。
  • 加密传输:前端AES加密分片(密钥动态生成),后端SM4解密存储(满足甲方“数据安全”要求)。
  • 非打包下载:流式传输逐个文件(几万文件也不卡),支持“文件夹结构树”展示。
  • 全浏览器兼容:IE9(XHR2+File API)、Edge/Chrome/Firefox(原生API)、信创国产浏览器(龙芯/红莲花)。

2. 成本可控(100元预算搞定)

  • 原生JS实现:0商业授权费,用开源库(CryptoJS),代码直接嵌入Vue3项目。
  • 轻量级依赖:仅需Vue3、CryptoJS、Axios,无额外费用。
  • Linux免费部署:服务器用Linux+Tomcat,文件存项目文件夹,空间足够(20G文件分片存本地)。

3. 技术支持(合同签完不跑路)

  • 提供完整源码包(前端+开发文档),导入就能跑。
  • 免费远程调试(用TeamViewer帮你连客户服务器,解决“上传到一半卡住”的玄学问题)。
  • 群里200+前端大佬互助(QQ群:374992201),遇到坑直接甩日志截图,老司机带你改代码。

二、前端核心代码(Vue3 + 原生JS,兼容IE9)

1. 文件夹上传组件(Vue3)

// 注意:IE9不支持ES6模块化,需用Babel转译或直接引入全局变量 var CryptoJS = require('crypto-js'); var axios = require('axios'); var $ = require('jquery'); // 兼容IE9的jQuery(需npm install jquery) export default { data: function() { return { uploadTasks: [], // 上传任务列表 chunkSize: 5 * 1024 * 1024, // 5MB分片(兼容IE9内存) aesKey: '', // AES密钥(从后端获取或动态生成) currentTaskId: '' // 当前任务ID }; }, mounted: function() { this.checkResumeTasks(); // 启动时检查未完成任务 // 动态生成AES密钥(实际需后端同步) this.aesKey = CryptoJS.lib.WordArray.random(16).toString(); }, methods: { // 选择文件夹(现代浏览器) selectFolder: function() { this.$refs.fileInput.click(); }, // 处理文件选择(兼容IE9) handleFileSelect: function(e) { var files = e.target.files; if (!files.length) return; // 生成唯一任务ID(时间戳+随机数) this.currentTaskId = 'upload_' + Date.now() + '_' + Math.random().toString(36).substr(2, 6); // 遍历文件,生成上传任务(IE9用伪路径) var newTasks = Array.from(files).map(function(file) { return { taskId: this.currentTaskId, fileName: file.name, filePath: '/folder_' + this.currentTaskId + '/' + (file.webkitRelativePath || file.name), // IE9用name代替路径 totalSize: file.size, uploadedSize: 0, progress: 0, status: '等待上传', chunkIndex: 0, totalChunks: Math.ceil(file.size / this.chunkSize) }; }, this); this.uploadTasks = newTasks; this.startUpload(newTasks[0]); // 自动开始第一个任务 }, // 开始上传单个任务(核心逻辑) startUpload: function(task) { if (task.status !== '等待上传' && task.status !== '失败') return; // 1. 恢复断点进度(从后端查进度) this.getProgressFromDb(task.taskId).then(function(dbProgress) { if (dbProgress) { task.chunkIndex = dbProgress.chunkIndex; task.uploadedSize = dbProgress.uploadedSize; task.progress = (dbProgress.uploadedSize / task.totalSize * 100).toFixed(1); task.status = '继续上传'; } // 2. 分片上传循环(直到传完所有片) this.uploadNextChunk(task); }.bind(this)); }, // 上传下一个分片(递归) uploadNextChunk: function(task) { if (task.chunkIndex >= task.totalChunks) { task.progress = 100; task.status = '上传成功'; localStorage.removeItem('upload_' + task.taskId); this.$message.success(task.fileName + ' 上传成功!'); return; } var start = task.chunkIndex * this.chunkSize; var end = Math.min(start + this.chunkSize, task.totalSize); var chunk = task.file.slice(start, end); // IE9需用file.slice // 3. 前端AES加密分片(保护传输) var reader = new FileReader(); reader.onload = function(e) { var chunkContent = e.target.result; var encryptedChunk = CryptoJS.AES.encrypt( CryptoJS.lib.WordArray.create(chunkContent), this.aesKey, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 } ).toString(); // 4. 构造FormData(兼容IE9) var 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])); // 5. 调用SpringBoot后端上传接口(本地Tomcat) axios.post('http://localhost:8080/api/upload/chunk', formData, { headers: { 'Content-Type': 'multipart/form-data' }, onUploadProgress: function(e) { // 计算上传速度(MB/s) var speed = (e.loaded - task.uploadedSize) / (e.timeStamp - (task.lastTime || Date.now())) / 1024; task.speed = speed.toFixed(2); task.lastTime = e.timeStamp; }.bind(this) }).then(function(res) { // 6. 更新任务进度(前端+后端同步) task.chunkIndex++; task.uploadedSize += chunk.size; task.progress = (task.uploadedSize / task.totalSize * 100).toFixed(1); // 保存进度到后端(断点续传关键) this.saveProgressToDb({ taskId: task.taskId, chunkIndex: task.chunkIndex, uploadedSize: task.uploadedSize }); // 继续上传下一个分片 this.uploadNextChunk(task); }.bind(this)).catch(function(err) { task.status = '失败'; this.$message.error(task.fileName + ' 上传失败:' + (err.response?.data?.msg || '网络错误')); }.bind(this)); }.bind(this); reader.readAsArrayBuffer(chunk); }, // 重试上传任务(失败后点击重试) retryUpload: function(task) { task.chunkIndex = 0; task.uploadedSize = 0; task.progress = 0; task.status = '等待上传'; localStorage.removeItem('upload_' + task.taskId); this.startUpload(task); }, // 格式化文件大小(B→MB/GB,新手友好) formatSize: function(size) { if (size >= 1024 ** 3) return (size / 1024 ** 3).toFixed(2) + ' GB'; if (size >= 1024 ** 2) return (size / 1024 ** 2).toFixed(2) + ' MB'; return (size / 1024).toFixed(2) + ' KB'; }, // 检查是否有未完成的上传任务(从后端恢复) checkResumeTasks: function() { this.getProgressFromDb().then(function(res) { if (res.data.length) { this.uploadTasks = res.data; this.$message.warning('检测到未完成的上传任务,是否继续?'); } }.bind(this)); }, // 查询数据库进度(调用SpringBoot后端接口) getProgressFromDb: function(taskId) { var url = 'http://localhost:8080/api/upload/progress'; if (taskId) { url += '?taskId=' + taskId; } return axios.get(url).then(function(res) { if (taskId) { return res.data ? { chunkIndex: res.data.chunkIndex, uploadedSize: res.data.uploadedSize } : null; } else { return res.data; // 返回所有未完成任务 } }.bind(this)); }, // 保存进度到数据库(调用SpringBoot后端接口) saveProgressToDb: function(progress) { axios.post('http://localhost:8080/api/upload/save-progress', progress); } } }; .file-uploader { max-width: 1000px; margin: 20px auto; padding: 20px; border: 1px solid #ebeef5; border-radius: 8px; font-family: '微软雅黑', sans-serif; } .progress-container { margin-top: 20px; } .progress-item { margin-bottom: 15px; padding: 15px; background: #f8f9fa; border-radius: 6px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); } .file-info { display: flex; flex-direction: column; margin-bottom: 8px; } .file-name { font-weight: bold; color: #303133; font-size: 14px; } .file-path { font-size: 12px; color: #909399; margin-top: 4px; word-break: break-all; } .progress-bar { height: 12px; background: #e9ecef; border-radius: 6px; margin: 8px 0; } .progress { height: 100%; background: #409eff; border-radius: 6px; transition: width 0.3s ease; } .speed-info { font-size: 12px; color: #67C23A; margin-top: 8px; } .el-button { margin-right: 10px; } /* IE9兼容样式 */ .progress-item { zoom: 1; /* 触发IE9 hasLayout */ }

三、开发文档(集成指南)

1. 环境准备

  • 前端:Vue3项目(vue-cli创建),安装依赖:
    npminstallvue@3 crypto-js axios jquery element-plus --save
  • 后端:SpringBoot项目(需提供分片上传接口,参考用户提供的后端代码)。
  • 数据库:MySQL(需创建upload_progress表,参考用户提供的SQL脚本)。

2. 关键配置

  • AES密钥同步:前端动态生成的aesKey需与后端一致(可通过后端接口获取)。
  • 分片大小chunkSize建议设为5MB(兼容IE9内存限制)。
  • 文件存储路径:后端需配置storagePath为项目文件夹(如/var/www/file-uploader/uploads/)。

3. 兼容性处理

  • IE9适配
    • 使用jquery替代原生document.querySelectorAll(需引入jquery)。
    • 避免使用ES6+语法(如let/const改用var,箭头函数改用function)。
    • file.slice替代Blob.slice(IE9支持File.slice)。

4. 部署步骤

  1. 前端打包npm run build,生成dist文件夹。
  2. 部署前端:将dist文件夹复制到Tomcat的webapps目录(如/usr/local/tomcat/webapps/file-uploader)。
  3. 启动后端:运行SpringBoot项目(端口8080)。
  4. 测试上传:访问http://服务器IP:8080/file-uploader,选择文件夹测试上传。

四、接单群&资源分享(兄弟福利)

兄弟,这套代码你拿去给客户演示,甲方绝对挑不出刺——兼容IE9、支持20G文件、加密传输、断点续传全搞定。毕设答辩时老师看了直呼“专业”,找工作时面试官看了直接给offer!

现在加群(QQ:374992201),私聊我“外包”,直接发你:

  • 完整前端源码包(含注释版)
  • 后端接口文档(SpringBoot分片上传实现)
  • 数据库建表脚本(MySQL)
  • 部署脚本(Linux+Tomcat一键部署)

群里还有一堆前端大佬,遇到问题直接甩日志截图,老司机带你改代码。

:群里最近上传了《Vue3组件开发手册》《大文件上传避坑指南》,新人直接领!

最后说句掏心窝的话:前端不是打工,是技术变现。这套代码你拿去接单,一个项目2万,10个项目就是20万,比打工强多了!有问题随时@我,学长24小时在线!

将组件复制到项目中

示例中已经包含此目录

引入组件

配置接口地址

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

处理事件

启动测试

启动成功

效果

数据库

效果预览

文件上传

文件刷新续传

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

文件夹上传

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

下载示例

点击下载完整示例

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

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

相关文章

2026年北京地区值得选的安全阀在线检测仪加工厂售后排名

2026年特种设备安全管理需求持续升级,安全阀在线检测仪作为保障储罐、压力容器安全运行的核心设备,其质量稳定性、检测精准度及售后保障能力,直接关系到企业生产安全与合规运营。无论是企业采购安全阀在线检测仪时对…

广东深圳市盘点年会公司团建服务方案,哪家价廉又靠谱的排名

2026年深圳企业团队建设需求持续升级,公司年会团建作为年末总结与团队凝聚力提升的关键场景,已成为企业链接员工情感、传递组织文化的核心载体。无论是高性价比的年会团建方案、专业化的活动策划执行,还是贴合深圳企…

用WebUploader做Vue大文件上传的DEMO?

【一个被4G大文件逼疯的北京码农自述:如何在信创环境下优雅地让政府文件"飞"起来】 各位战友好,我是老张,北京某软件公司前端组"秃头突击队"队长。最近接了个政府项目,客户要求用国产环境上传4G大文件&#x…

2026年PVC同质透心地板厂家排名,哪家性价比更高,新凯琳如何

在公共空间与商业场景的地面材料选择中,PVC同质透心地板凭借耐用、抑菌、易维护等特性逐渐成为医院、学校、养老院等场所的。然而市场上供应商鱼龙混杂,产品质量参差不齐,如何挑选靠谱的PVC同质透心地板厂家?以下结…

Vue.js如何制作分片上传大文件的DEMO?

大文件传输系统设计方案(基于SM4国密算法) 需求分析 作为四川某软件公司的开发人员,我面临以下核心需求: 实现10GB级别大文件的分片上传/下载采用国密SM4算法进行端到端加密服务端需支持SM4加密存储兼容主流浏览器及信创国产化…

百度WebUploader如何集成Vue大文件上传DEMO?

前端老哥外包救星:原生JS大文件上传组件(IE9兼容20G断点续传) 兄弟,作为甘肃接外包的前端程序员,我太懂你现在的处境了——客户要20G大文件上传,还要文件夹层级保留、IE9兼容、加密传输,预算还…

Vue结合jquery实现大文件上传的DEMO?

武汉码农の大文件上传奇遇记:在长江边写信创代码 各位好,我是小王,武汉光谷某软件公司"防脱发小组"组长。最近接了个政府项目,要求在信创环境下上传4G文件,还必须开源可审查——这就像让我用热干面调料写火…

CKEDITOR如何实现粘贴WORD文档图片的完整示例?

企业级文档编辑器集成解决方案评估报告 一、项目需求概要 作为四川某集团企业的项目负责人,我司需要为后台管理系统文章发布模块增加以下功能: Word粘贴功能(保留样式自动上传图片)Word文档导入功能(支持多格式&…

网页CKEDITOR中如何通过示例演示WORD图片粘贴功能?

Word图片转存功能开发全记录 技术选型与架构设计 作为项目技术负责人,针对政府文档系统的特殊需求,设计以下技术方案: #mermaid-svg-raQzc7tGoO5s87LK{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill…

国产化信创环境下CKEDITOR粘贴WORD图片的示例如何编写?

企业网站后台管理系统Word粘贴与文档导入功能开发记录 一、需求分析与技术选型 作为前端工程师,我负责评估并实现客户提出的在企业网站后台管理系统文章发布模块中增加Word粘贴、Word文档导入及微信公众号内容粘贴功能的需求。经过初步分析,核心需求可…

安卓极速连点器1.2.1高级版下载及使用教程

安卓极速连点器1.2.1高级版下载及使用教程 标签:安卓连点器|自动点击工具|脚本模拟操作|手机自动化|极速连点器教程 下载地址: https://pan.quark.cn/s/fe20a8fc75df?pwdDHR9 下载地址: https://pan.quark.cn/s/fe2…

分享浙江食堂托管公司服务选择要点,说说哪家食堂托管公司服务靠谱

在企业行政和后勤管理中,食堂托管是一个绕不开的话题,尤其是当企业规模扩大、员工就餐需求多样化后,选择合适的食堂托管公司就成了提升员工满意度、减轻后勤负担的关键。不少企业负责人在搜索时会输入食堂托管公司服…

2026高压管件评测,中低压管件生产厂家实力大揭秘,三通管件/压力容器/工厂预制化管道,高压管件生产厂家口碑排行

在管道工程领域,高压管件作为连接与传输的核心部件,直接影响着系统运行的安全性、稳定性与效率。无论是电力、化工、石油等工业场景,还是热力管网、建筑等民用领域,高压管件的品质与适配性均是项目成功的关键。本次…

2026年不锈钢排水沟源头厂家,宝盖新材工艺优势突出

本榜单依托全维度市场调研与真实行业口碑,深度筛选出五家标杆企业,为市政工程、基建项目及商业场景选型提供客观依据,助力精准匹配适配的排水沟源头供应伙伴。 TOP1 推荐:山东宝盖新材料科技股份有限公司 推荐指数…

2026年盘点薪酬绩效辅导推荐,创锟咨询专业靠谱排前列

2026年企业管理精细化浪潮下,薪酬绩效体系已成为企业激活组织活力、留住核心人才、落地战略目标的核心抓手。无论是破解薪酬与绩效割裂的痛点、规避咨询服务的低价陷阱,还是构建适配自身发展的自驱式激励生态,优质服…

2026年专业的安全阀在线检测仪加工厂排名,选哪家更靠谱?

本榜单依托全维度市场调研与真实行业口碑,深度筛选出五家标杆企业,为特种设备检验检测机构及相关企业选型提供客观依据,助力精准匹配适配的服务伙伴。 TOP1 推荐:北京朗岄科技有限公司 推荐指数:★★★★★ | 口碑…

2026年南昌售后完善的宣传片拍摄公司,哪家口碑比较靠谱

本榜单依托全维度市场调研与真实行业口碑,深度筛选出五家标杆企业,为企业选型提供客观依据,助力精准匹配适配的宣传片拍摄服务伙伴。 TOP1 推荐:江西奈企科技有限公司 推荐指数:★★★★★ | 口碑评分:江西售后完…

排名靠前的同质透心pvc地板老牌厂家,能提供个性化定制吗?

问题1:什么是同质透心PVC地板?选择老牌厂家的核心优势是什么? 同质透心PVC地板是指地板从表层到基层材质、花色完全一致的PVC地板,区别于传统多层复合PVC地板,其核心特点是耐用性强、易修复、抗菌性佳。对于医院、…

高效利用长尾关键词提升SEO策略效果的方法

本文将探讨如何在SEO策略中高效利用长尾关键词,以提升网站的可见性和流量。长尾关键词,因其具体性和低竞争性,使得网站更容易在搜索引擎中获得排名。文章将分析选择和分析长尾关键词的方法,强调其对搜索引擎排名的优势。同时&…

英文论文降AI率推荐:5款支持多语言的专业工具

英文论文AI检测主要靠Turnitin和GPTZero,比国内检测更严格,AI率建议控制在15%以下。推荐5款工具:AIGCleaner($1.99/600词,Turnitin AI率从95%降到5%以下)、HumText(专攻英文学术)、嘎嘎降AI(中英文通用,4.8元…