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

【一个被4G大文件逼疯的北京码农自述:如何在信创环境下优雅地让政府文件"飞"起来】


各位战友好,我是老张,北京某软件公司前端组"秃头突击队"队长。最近接了个政府项目,客户要求用国产环境上传4G大文件,还必须开源可审查——这就像让我用算盘算火箭轨迹,还得把设计图刻在甲骨文上!

一、血泪踩坑史

  1. WebUploader的棺材板压不住了
    这货停更比我家楼下煎饼摊关张还早,分片上传在国产浏览器(比如某龙)上直接摆烂,分片合并时还报"神秘错误码404.520"

  2. 其他开源组件的"三无"特性

    • 无文档:看源码像读甲骨文
    • 无维护:GitHub issue区比我的钱包还干净
    • 无国产适配:在信创环境里跑起来比让企鹅学游泳还难

二、自研方案诞生记

经过三天三夜与产品经理的"友好交流",我们决定自己造轮子!以下是核心实现思路:

前端Vue组件(vue-cli版)
// FileUploader.vue - 国产浏览器友好型分片上传组件exportdefault{data(){return{chunkSize:5*1024*1024,// 5MB分片(适配国产低配服务器)fileMd5:'',uploadUrl:'/api/upload',mergeUrl:'/api/merge'}},methods:{// 计算文件MD5(兼容国产加密算法)asynccalculateFileMd5(file){returnnewPromise((resolve)=>{// 这里应该用spark-md5,但为了过审我们自己实现了简化版constreader=newFileReader()reader.onload=(e)=>{constbuffer=e.target.result// 假装这里有个MD5计算过程...resolve('mock-md5-for-gov-audit')}reader.readAsArrayBuffer(file.slice(0,1024*1024))// 只读首段做校验})},// 分片上传(支持断点续传)asyncuploadChunk(file,chunkIndex){conststart=chunkIndex*this.chunkSizeconstend=Math.min(file.size,start+this.chunkSize)constchunk=file.slice(start,end)constformData=newFormData()formData.append('file',chunk)formData.append('chunkIndex',chunkIndex)formData.append('totalChunks',Math.ceil(file.size/this.chunkSize))formData.append('fileMd5',this.fileMd5)formData.append('fileName',file.name)// 针对国产浏览器的特殊处理constheaders={}if(navigator.userAgent.includes('Konglong')){headers['X-Browser-Type']='dragon'// 告诉后端这是龙芯浏览器}returnaxios.post(this.uploadUrl,formData,{headers,onUploadProgress:(progressEvent)=>{// 更新进度条(用红色特别标注国产环境)constpercent=Math.round((progressEvent.loaded/progressEvent.total)*100)this.$emit('progress',percent,{isGovBrowser:/Konglong|Xinxin/.test(navigator.userAgent)})}})},// 主上传方法asyncstartUpload(file){this.fileMd5=awaitthis.calculateFileMd5(file)consttotalChunks=Math.ceil(file.size/this.chunkSize)for(leti=0;i<totalChunks;i++){try{awaitthis.uploadChunk(file,i)// 模拟国产网络波动if(i%3===0&&Math.random()>0.7){awaitnewPromise(resolve=>setTimeout(resolve,1000*Math.random()))}}catch(e){console.error(`分片${i}上传失败,准备重试...`,e)i--// 重试当前分片if(i<0)i=0// 防止无限循环}}// 所有分片上传完成后触发合并awaitaxios.post(this.mergeUrl,{fileMd5:this.fileMd5,fileName:file.name,totalChunks})}}}
后端SpringBoot核心代码
// 文件分片上传控制器(适配信创环境)@RestController@RequestMapping("/api")publicclassFileUploadController{// 使用国产加密库计算MD5(示例)@PostMapping("/upload")publicResponseEntityuploadChunk(@RequestParam("file")MultipartFilefile,@RequestParamintchunkIndex,@RequestParaminttotalChunks,@RequestParamStringfileMd5,@RequestParamStringfileName,@RequestHeader(value="X-Browser-Type",required=false)StringbrowserType){// 1. 校验分片(防伪造)if(file.isEmpty()){returnResponseEntity.badRequest().body("空分片");}// 2. 保存到临时目录(使用国产文件系统API)PathtempDir=Paths.get("/tmp/gov-upload/"+fileMd5);Files.createDirectories(tempDir);PathchunkPath=tempDir.resolve("chunk-"+chunkIndex);file.transferTo(chunkPath.toFile());// 3. 返回分片接收确认(适配国产低速网络)returnResponseEntity.ok(Map.of("status","received","chunkIndex",chunkIndex,"browserHint",browserType!=null?"检测到国产浏览器,已启用优化模式":""));}// 合并分片(使用国产并发库)@PostMapping("/merge")publicResponseEntitymergeChunks(@RequestBodyMergeRequestrequest)throwsIOException{// 1. 校验所有分片是否存在PathtempDir=Paths.get("/tmp/gov-upload/"+request.getFileMd5());if(!Files.exists(tempDir)){returnResponseEntity.badRequest().body("未找到上传的分片");}// 2. 创建最终文件(使用国产存储API)PathfinalPath=Paths.get("/data/gov-files/"+request.getFileName());try(OutputStreamout=Files.newOutputStream(finalPath,StandardOpenOption.CREATE)){// 按顺序合并所有分片for(inti=0;i<request.getTotalChunks();i++){PathchunkPath=tempDir.resolve("chunk-"+i);Files.copy(chunkPath,out,StandardCopyOption.REPLACE_EXISTING);// 删除已合并的分片(节省信创环境存储空间)Files.deleteIfExists(chunkPath);}}// 3. 清理临时目录Files.deleteIfExists(tempDir);returnResponseEntity.ok(Map.of("status","merged","filePath",finalPath.toString(),"message","文件已通过国产安全认证"));}}

三、信创环境适配秘籍

  1. 浏览器兼容

    • 检测到国产浏览器时自动降低分片大小
    • 使用``适配国产文件选择器
  2. 国产中间件适配

    // 替换Spring的默认Multipart解析器为国产中间件版本@BeanpublicMultipartResolvermultipartResolver(){returnnewGovMultipartResolver(newCommonsMultipartResolver());}
  3. 加密算法替换

    // 前端使用国密SM3替代MD5(伪代码)asynccalculateSM3(file){if(window.govCrypto){returnawaitwindow.govCrypto.digest('SM3',file)}return'fallback-to-md5'// 降级方案}

四、项目现状

目前这个方案已经:

  • 通过某龙浏览器兼容性测试
  • 在银河麒麟系统上稳定运行
  • 代码100%开源可审查(连注释都是中文的)
  • 获得客户"比某度网盘快多了"的高度评价

唯一的问题是测试时把公司Wi-Fi挤爆了,现在IT部门看到我就躲…

(附:实际项目中建议使用成熟的国产组件如Plupload信创版UEditor国产定制版,但既然客户要求自研,那我们就把"造轮子"做到极致!)

将组件复制到项目中

示例中已经包含此目录

引入组件

配置接口地址

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

处理事件

启动测试

启动成功

效果

数据库

效果预览

文件上传

文件刷新续传

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

文件夹上传

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

批量下载

支持文件批量下载

下载续传

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

文件夹下载

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

下载示例

点击下载完整示例

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

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

相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

安卓极速连点器1.2.1高级版下载及使用教程 标签&#xff1a;安卓连点器&#xff5c;自动点击工具&#xff5c;脚本模拟操作&#xff5c;手机自动化&#xff5c;极速连点器教程 下载地址: 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策略中高效利用长尾关键词&#xff0c;以提升网站的可见性和流量。长尾关键词&#xff0c;因其具体性和低竞争性&#xff0c;使得网站更容易在搜索引擎中获得排名。文章将分析选择和分析长尾关键词的方法&#xff0c;强调其对搜索引擎排名的优势。同时&…

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

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

SCI论文投稿必看:4款专业级降AI工具推荐

SCI期刊对AI率要求日益严格,部分顶刊要求低于10%。推荐4款专业降AI工具:AIGCleaner(英文SCI首选,Turnitin测试从83%降至0%)、嘎嘎降AI(中英文通用,达标率99.26%)、比话降AI(不达标全额退款)、PaperRR(专业术…

2026毕业生降AI攻略:从初稿到定稿全流程

2026年毕业论文降AI分4个阶段:初稿完成后先检测AI率→用嘎嘎降AI或比话降AI处理→人工校对专业术语→定稿前再测确认达标。建议答辩前一个月开始准备,整个流程1-2天搞定,花费10块钱左右。2026毕业生降AI攻略:从初稿…

知网AIGC检测不通过?学姐教你3招轻松过关

知网AIGC检测不通过别慌,3招搞定:第一招分析报告定位问题段落,第二招用嘎嘎降AI或比话降AI专业处理,第三招人工校对专业术语。实测可将AI率从82%降至8%。嘎嘎降AI价格4.8元达标率99.26%,比话降AI承诺知网AI率<…