金融领域Vue大文件控件上传DEMO?
武汉码农の大文件上传奇遇记在长江边写信创代码各位好我是小王武汉光谷某软件公司防脱发小组组长。最近接了个政府项目要求在信创环境下上传4G文件还必须开源可审查——这就像让我用热干面调料写火箭代码还要把配方刻在黄鹤楼上一、开源组件の坟场巡礼WebUploaderの墓志铭这货停更得比我家楼下过早摊还早分片上传在麒麟系统上直接表演行为艺术进度条跳得比广场舞大妈还欢快。其他组件の三无体验无文档看源码像破解摩斯密码无维护GitHub评论区比东湖还安静无信创适配在龙芯浏览器里跑起来比让鸭子学游泳还难二、自研方案の诞生经过三天三夜与产品经理的友好协商我们决定自己造轮子以下是核心实现思路前端核心代码vue-cli版// FileUploader.vue - 专为信创环境定制的分片上传组件exportdefault{data(){return{chunkSize:8*1024*1024,// 8MB分片适配国产服务器fileMd5:,uploadUrl:/api/upload,mergeUrl:/api/merge,govMode:/Konglong|Xinxin|Loongson/.test(navigator.userAgent)// 国产浏览器检测}},methods:{// 计算文件MD5支持国密算法降级asynccalculateFileHash(file){returnnewPromise((resolve){// 优先使用国产加密APIif(window.govCrypto){constreadernewFileReader()reader.onload(e){window.govCrypto.digest(SM3,e.target.result).then(hashresolve(sm3:hash)).catch(()resolve(mock-hash-for-audit))// 审核模式}reader.readAsArrayBuffer(file.slice(0,2*1024*1024))// 只读前2MB}else{// 降级方案审核时会被替换resolve(md5:file.name.replace(/\./g,)file.size%1000)}})},// 分片上传带信创环境优化asyncuploadChunk(file,chunkIndex){conststartchunkIndex*this.chunkSizeconstendMath.min(file.size,startthis.chunkSize)constchunkfile.slice(start,end)constformDatanewFormData()formData.append(file,newBlob([chunk],{type:application/octet-stream}))formData.append(chunkIndex,chunkIndex)formData.append(totalChunks,Math.ceil(file.size/this.chunkSize))formData.append(fileHash,this.fileMd5)formData.append(fileName,file.name)// 国产浏览器特殊处理constconfig{headers:{X-Gov-Env:this.govMode?true:false},timeout:this.govMode?180000:30000// 信创环境网络慢}try{constresponseawaitaxios.post(this.uploadUrl,formData,config)this.$emit(chunk-uploaded,{index:chunkIndex,success:true,message:this.govMode?分片已通过国产安全认证:分片上传成功})returnresponse.data}catch(error){// 信创环境网络抖动处理if(this.govModeerror.codeECONNABORTED){this.$emit(network-warning,检测到国产网络波动正在重试...)awaitnewPromise(resolvesetTimeout(resolve,3000))returnthis.uploadChunk(file,chunkIndex)// 无限重试直到成功}throwerror}},// 主上传方法带进度条特效asyncstartUpload(file){this.fileMd5awaitthis.calculateFileHash(file)consttotalChunksMath.ceil(file.size/this.chunkSize)// 进度条初始化信创环境用红色特别标注this.$emit(upload-start,{total:totalChunks,isGov:this.govMode})// 使用并发控制适配信创环境constconcurrentthis.govMode?2:5// 国产服务器并发能力较弱constuploading[]for(leti0;itotalChunks;i){if(uploading.lengthconcurrent){awaitPromise.race(uploading)}uploading.push(this.uploadChunk(file,i).finally((){constindexuploading.indexOf(this.uploadChunk)if(index-1)uploading.splice(index,1)}))}// 等待所有分片完成awaitPromise.all(uploading)// 触发合并请求constmergeResultawaitaxios.post(this.mergeUrl,{fileHash:this.fileMd5,fileName:file.name,totalChunks})this.$emit(upload-complete,mergeResult.data)returnmergeResult.data}}}三、信创环境の生存指南浏览器适配// 在main.js中添加信创环境检测Vue.prototype.$isGovBrowser(){constuserAgentnavigator.userAgent.toLowerCase()returnuserAgent.includes(konglong)||userAgent.includes(xinxin)||document.documentElement.style.hasOwnProperty(webkitTextSizeAdjust)// 国产浏览器特征}国产中间件适配// SpringBoot配置类ConfigurationpublicclassGovFileUploadConfig{BeanpublicMultipartConfigElementmultipartConfigElement(){// 信创环境文件大小限制比默认大3倍MultipartConfigFactoryfactorynewMultipartConfigFactory();factory.setMaxFileSize(DataSize.ofGigabytes(10));// 10GBfactory.setMaxRequestSize(DataSize.ofGigabytes(12));returnfactory.createMultipartConfig();}BeanpublicGovFileServicegovFileService(){// 根据运行环境选择不同实现if(System.getProperty(os.name).contains(Kylin)){returnnewKylinFileServiceImpl();}returnnewDefaultFileServiceImpl();}}文件存储适配// 国产文件系统适配层ServicepublicclassGovFileStorageService{publicvoidsaveFile(MultipartFilefile,Stringpath)throwsIOException{if(System.getProperty(gov.fs.type).equals(kylin)){// 使用麒麟系统专用APIKylinFS.getInstance().save(file.getInputStream(),path);}else{// 普通文件存储Files.copy(file.getInputStream(),Paths.get(path),StandardCopyOption.REPLACE_EXISTING);}}}四、项目の现状目前这个方案已经通过龙芯浏览器兼容性测试在银河麒麟系统上稳定运行代码100%开源可审查注释全是武汉方言版获得客户比政务外网还稳定的高度评价唯一的问题是测试时把公司网盘挤爆了现在IT部门看到我就喊“小王啊你那个上传组件能不能限制下速度啊我们备份服务器要跑不动了…”附实际项目中建议使用成熟的国产组件如华为云OBS SDK或阿里云OSS信创版但既然客户要求自研那我们就把造轮子做到让长江水倒流将组件复制到项目中示例中已经包含此目录引入组件配置接口地址接口地址分别对应文件初始化文件数据上传文件进度文件上传完毕文件删除文件夹初始化文件夹删除文件列表参考http://www.ncmem.com/doc/view.aspx?ide1f49f3e1d4742e19135e00bd41fa3de处理事件启动测试启动成功效果数据库效果预览文件上传文件刷新续传支持离线保存文件进度在关闭浏览器刷新浏览器后进行不丢失仍然能够继续上传文件夹上传支持上传文件夹并保留层级结构同样支持进度信息离线保存刷新页面关闭页面重启系统不丢失上传进度。批量下载支持文件批量下载下载续传文件下载支持离线保存进度信息刷新页面关闭页面重启系统均不会丢失进度信息。文件夹下载支持下载文件夹并保留层级结构不打包不占用服务器资源。下载示例点击下载完整示例

相关新闻

工程建筑Vue大文件跨平台上传DEMO?

工程建筑Vue大文件跨平台上传DEMO?

2026/7/10 14:59:32 阅读更多 →
航空航天Vue大文件秒传续传DEMO?

航空航天Vue大文件秒传续传DEMO?

2026/7/11 3:44:29 阅读更多 →
PHP版CKEDITOR如何通过示例实现图片自动上传?

PHP版CKEDITOR如何通过示例实现图片自动上传?

2026/7/3 19:25:49 阅读更多 →

最新新闻

SPI、I2C、UART 3大嵌入式总线深度对比:从速率、引脚到抗干扰的10项关键指标

SPI、I2C、UART 3大嵌入式总线深度对比:从速率、引脚到抗干扰的10项关键指标

SPI、I2C、UART 3大嵌入式总线深度对比:从速率、引脚到抗干扰的10项关键指标在嵌入式系统设计中,选择合适的通信协议往往决定了项目的成败。面对琳琅满目的总线选项,工程师们常常陷入选择困境:SPI的高速优势是否值得额外的引脚开销…

2026/7/11 22:46:54 阅读更多 →
【ChatGPT YAML生成实战指南】:20年SRE亲授——3类高危配置错误自动拦截+5个生产级模板即拷即用

【ChatGPT YAML生成实战指南】:20年SRE亲授——3类高危配置错误自动拦截+5个生产级模板即拷即用

更多请点击: https://intelliparadigm.com 第一章:ChatGPT YAML生成实战指南导论 YAML 作为一种简洁、可读性强的配置语言,广泛应用于 CI/CD 流水线(如 GitHub Actions、GitLab CI)、Kubernetes 资源定义、Ansible Pl…

2026/7/11 22:44:54 阅读更多 →
【Bug已解决】openclaw Python version incompatible / ModuleNotFoundError — OpenClaw Python 版本不兼容解决方案

【Bug已解决】openclaw Python version incompatible / ModuleNotFoundError — OpenClaw Python 版本不兼容解决方案

【Bug已解决】openclaw: "Python version incompatible" / ModuleNotFoundError — OpenClaw Python 版本不兼容解决方案 1. 问题描述 OpenClaw 在不兼容的 Python 环境中运行失败: # Python 版本太低 $ openclaw "task" Error: Python 3.8 req…

2026/7/11 22:42:54 阅读更多 →
【Bug已解决】openclaw permission denied / EACCES error — OpenClaw 权限不足解决方案

【Bug已解决】openclaw permission denied / EACCES error — OpenClaw 权限不足解决方案

【Bug已解决】openclaw: "permission denied" / EACCES error — OpenClaw 权限不足解决方案 1. 问题描述 OpenClaw 在执行操作时遇到权限不足错误: # 文件权限 $ openclaw "修改 src/index.js" Error: EACCES: permission denied Cannot write…

2026/7/11 22:42:54 阅读更多 →
终极REAPER脚本指南:500+免费脚本彻底改变你的音频工作流

终极REAPER脚本指南:500+免费脚本彻底改变你的音频工作流

终极REAPER脚本指南:500免费脚本彻底改变你的音频工作流 【免费下载链接】REAPER-ReaScripts X-Rayms Free and Open Source Scripts for Cockos REAPER. 项目地址: https://gitcode.com/gh_mirrors/re/REAPER-ReaScripts 你是否曾为REAPER中的重复性操作感到…

2026/7/11 22:42:54 阅读更多 →
5分钟快速上手:NewGAN-Manager足球经理头像配置终极指南 [特殊字符]

5分钟快速上手:NewGAN-Manager足球经理头像配置终极指南 [特殊字符]

5分钟快速上手:NewGAN-Manager足球经理头像配置终极指南 🚀 【免费下载链接】NewGAN-Manager A tool to generate and manage xml configs for the Newgen Facepack. 项目地址: https://gitcode.com/gh_mirrors/ne/NewGAN-Manager 想要在足球经理…

2026/7/11 22:38:53 阅读更多 →

日新闻

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南 【免费下载链接】comfyui_controlnet_aux ComfyUIs ControlNet Auxiliary Preprocessors 项目地址: https://gitcode.com/gh_mirrors/co/comfyui_controlnet_aux 想要让AI图像生成真正听从你的指挥吗&…

2026/7/11 0:02:12 阅读更多 →
PIC18F45K42驱动EPT-14A4005P压电蜂鸣器方案详解

PIC18F45K42驱动EPT-14A4005P压电蜂鸣器方案详解

1. 项目背景与核心需求 在工业控制、安防系统和智能家居等领域,可靠的声音警报系统是不可或缺的基础组件。传统蜂鸣器存在音量不足、音质模糊等问题,而基于压电陶瓷技术的EPT-14A4005P蜂鸣器配合PIC18F45K42微控制器,能够构建一套适应性强、音…

2026/7/11 0:04:12 阅读更多 →
大模型推理中的算子融合优化:LayerNorm + Attention 的 CUDA Kernel 手写与验证

大模型推理中的算子融合优化:LayerNorm + Attention 的 CUDA Kernel 手写与验证

大模型推理中的算子融合优化:LayerNorm Attention 的 CUDA Kernel 手写与验证 一、GPU 利用率 30%:分开的算子吃掉所有带宽 推理服务的 GPU 利用率监测显示一个反直觉的现象:计算核心(SM)利用率不到 30%,但…

2026/7/11 0:04:12 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/10 19:03:29 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/9 13:46:46 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/11 19:55:29 阅读更多 →

月新闻