军工系统中,SpringCloud如何处理百M级别大文件的下载速度?
政府涉密项目大文件传输系统技术方案——基于信创环境的SM4国密加密与JSP业务集成一、项目背景与核心需求作为北京某上市公司项目经理我司承担的某部委涉密项目需实现10GB级安全文件传输并深度集成至现有JSP业务系统。核心需求包括涉密文件传输10GB文件及文件夹保留层级结构上传/下载国密安全要求全程采用SM4算法加密支持人大金仓国产数据库全浏览器兼容IE8及国产浏览器奇安信/红莲花/龙芯信创生态适配操作系统中标麒麟/统信UOS数据库人大金仓V8兼容Oracle语法中间件Tomcat 9.0JSP支持源码可控提供完整源代码支持二次开发如与CA证书集成二、技术选型与架构设计1. 分层架构设计用户终端Web前端JSP服务端国密加密服务人大金仓数据库SM4硬件加密卡业务系统集成2. 关键组件选型组件类型选型方案国产化适配说明前端框架Vue 2.6 jQuery 1.12IE8兼容通过es5-shim支持IE8语法分片上传自定义实现基于FileReader兼容IE10的Blob回退方案国密算法Bouncy CastleJava端通过JCE提供SM4加密API服务端Spring Boot 2.7 JSP保持现有技术栈提供RESTful接口数据库MyBatis 人大金仓V8使用kingbase8JDBC驱动存储本地磁盘 元数据数据库避免依赖FastDFS等分布式系统三、核心代码实现1. 前端分片上传兼容IE8// IE8兼容的SM4加密工具基于CryptoJSvarSM4Crypto{encrypt:function(data,key){// 实际项目中替换为GMSSL的WebAssembly版本returnCryptoJS.SM4.encrypt(data,key).toString();},decrypt:function(ciphertext,key){returnCryptoJS.SM4.decrypt(ciphertext,key).toString(CryptoJS.enc.Utf8);}};// 文件夹上传处理器递归遍历文件树functionFolderUploader(options){this.chunkSize5*1024*1024;// 5MB分片this.fileIdthis._generateUUID();}FolderUploader.prototype{_uploadFile:function(file,relativePath){varselfthis;varchunksMath.ceil(file.size/this.chunkSize);varkey1234567890abcdef;// 实际从服务端获取for(vari0;ichunks;i){varstarti*this.chunkSize;varendMath.min(file.size,startthis.chunkSize);varchunkfile.slice(start,end);varreadernewFileReader();reader.onloadfunction(e){varencryptedSM4Crypto.encrypt(arrayBufferToBase64(e.target.result),key);varformDatanewFormData();formData.append(file,newBlob([encrypted]));formData.append(chunkIndex,i);formData.append(totalChunks,chunks);formData.append(fileId,self.fileId);formData.append(relativePath,relativePath);formData.append(fileName,file.name);$.ajax({url:/api/upload/chunk,type:POST,data:formData,processData:false,contentType:false,success:function(){if(ichunks-1)self._notifyComplete(file.name);}});};reader.readAsArrayBuffer(chunk);}},uploadFolder:function(folderEntry){varselfthis;varreaderfolderEntry.createReader();reader.readEntries(function(entries){for(vari0;ientries.length;i){varentryentries[i];if(entry.isFile){entry.file(function(file){self._uploadFile(file,entry.fullPath);});}elseif(entry.isDirectory){self.uploadFolder(entry);// 递归处理子目录}}});}};2. 服务端JSP集成Spring Boot ControllerRestControllerRequestMapping(/api/upload)publicclassFileUploadController{AutowiredprivateKingbaseTemplatekingbaseTemplate;Value(${sm4.key})privateStringsm4Key;PostMapping(/chunk)publicResponseEntityhandleChunk(RequestParam(file)MultipartFilefile,RequestParamintchunkIndex,RequestParaminttotalChunks,RequestParamStringfileId,RequestParamStringrelativePath,RequestParamStringfileName){try{// 1. 解密分片使用Bouncy Castlebyte[]decryptedSM4Util.decrypt(file.getBytes(),sm4Key.getBytes());// 2. 暂存分片到本地PathtempDirPaths.get(/data/chunks,fileId);Files.createDirectories(tempDir);Files.write(tempDir.resolve(chunk_chunkIndex),decrypted);// 3. 如果是最后一片合并文件if(chunkIndextotalChunks-1){PathmergedFilemergeChunks(tempDir,fileId);saveToDatabase(fileId,fileName,relativePath,mergedFile);returnResponseEntity.ok().body(Collections.singletonMap(status,completed));}returnResponseEntity.ok().body(Collections.singletonMap(status,accepted));}catch(Exceptione){returnResponseEntity.status(500).build();}}privatevoidsaveToDatabase(StringfileId,StringfileName,StringrelativePath,PathfilePath){StringsqlINSERT INTO SECURE_FILES (FILE_ID, FILE_NAME, RELATIVE_PATH, STORAGE_PATH, CREATE_TIME) VALUES (?, ?, ?, ?, NOW());kingbaseTemplate.update(sql,fileId,fileName,relativePath,filePath.toString());}}3. 人大金仓数据库适配INSERT INTO SECURE_FILES ( FILE_ID, FILE_NAME, RELATIVE_PATH, STORAGE_PATH, CREATE_TIME ) VALUES ( #{fileId,jdbcTypeVARCHAR}, #{fileName,jdbcTypeVARCHAR}, #{relativePath,jdbcTypeVARCHAR}, #{storagePath,jdbcTypeVARCHAR}, CURRENT_TIMESTAMP ) SELECT * FROM SECURE_FILES WHERE RELATIVE_PATH LIKE #{pathPrefix} || % ORDER BY RELATIVE_PATH四、关键问题解决方案IE8兼容性使用jQuery.ajax替代fetch通过iframe实现文件下载禁用FileReader改用Flash或ActiveX控件仅限内网10GB文件性能优化前端分片大小动态调整根据网络状况5MB~20MB服务端异步合并分片避免阻塞主线程文件夹层级保留前端记录webkitRelativePathChrome或自定义路径解析服务端将路径信息存入人大金仓的RELATIVE_PATH字段信创环境适配数据库使用人大金仓的kingbase8驱动配置连接池加密通过JCE提供SM4算法避免依赖OpenSSL五、项目实施计划第一阶段2周完成SM4加密的Java/JS实现搭建人大金仓测试环境实现基础分片上传1GB验证第二阶段3周开发文件夹层级处理逻辑完成IE8兼容性测试集成至现有JSP业务系统第三阶段1周压力测试10GB文件传输稳定性编写安全审计日志模块准备涉密项目验收文档六、风险评估与应对风险项应对方案IE8插件限制与浏览器厂商联合调试采用ActiveX控件仅限内网人大金仓性能问题优化SQL语句添加RELATIVE_PATH字段索引10GB内存溢出采用磁盘临时存储替代内存缓存涉密审计要求记录所有文件操作日志至独立审计库该方案已在统信UOS飞腾服务器上验证实现5GB文件稳定传输速度3MB/sSM4加密对性能影响控制在15%以内。下一步将优化分片合并策略目标提升至5MB/s。SQL示例创建数据库配置数据库连接自动下载maven依赖启动项目启动成功访问及测试默认页面接口定义在浏览器中访问数据表中的数据效果预览文件上传文件刷新续传支持离线保存文件进度在关闭浏览器刷新浏览器后进行不丢失仍然能够继续上传文件夹上传支持上传文件夹并保留层级结构同样支持进度信息离线保存刷新页面关闭页面重启系统不丢失上传进度。批量下载支持文件批量下载下载续传文件下载支持离线保存进度信息刷新页面关闭页面重启系统均不会丢失进度信息。文件夹下载支持下载文件夹并保留层级结构不打包不占用服务器资源。示例下载下载完整示例

相关新闻

基于微信+SpringBoot的智慧共享停车位系统

基于微信+SpringBoot的智慧共享停车位系统

一、项目技术介绍 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/…

2026/7/3 2:10:42 阅读更多 →
深度学习资源合集(第二辑)

深度学习资源合集(第二辑)

【AI资料】深度学习必备!357份AI行业资料,独家揭秘! 文件大小: -内容特色: 357份AI行业资料,涵盖入门到进阶适用人群: 零基础学习者、AI爱好者、转行者核心价值: 一站式掌握AI核心概念与行业趋势下载链接: https://pan.quark.cn/…

2026/7/3 15:32:10 阅读更多 →
Mod Organizer 2 模组管理进阶指南:从新手到专家的场景化解决方案

Mod Organizer 2 模组管理进阶指南:从新手到专家的场景化解决方案

Mod Organizer 2 模组管理进阶指南:从新手到专家的场景化解决方案 【免费下载链接】modorganizer Mod manager for various PC games. Discord Server: https://discord.gg/ewUVAqyrQX if you would like to be more involved 项目地址: https://gitcode.com/gh_…

2026/7/3 15:32:12 阅读更多 →

最新新闻

ICM-42688-P与PIC18F67K40在工业自动化中的高性能运动检测方案

ICM-42688-P与PIC18F67K40在工业自动化中的高性能运动检测方案

1. ICM-42688-P与PIC18F67K40的黄金组合解析在工业自动化和机器人控制领域,传感器与微控制器的协同工作能力直接决定了系统的响应速度和测量精度。ICM-42688-P作为TDK InvenSense推出的6轴MEMS运动跟踪传感器,与Microchip的PIC18F67K40微控制器形成的解决…

2026/7/5 7:08:01 阅读更多 →
PUBG罗技鼠标宏压枪脚本:三分钟快速上手终极指南

PUBG罗技鼠标宏压枪脚本:三分钟快速上手终极指南

PUBG罗技鼠标宏压枪脚本:三分钟快速上手终极指南 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 还在为PUBG中难以控制的武器后坐力而…

2026/7/5 7:08:01 阅读更多 →
海光K100_AI单卡全离线部署PPT生成系统

海光K100_AI单卡全离线部署PPT生成系统

一、引言随着人工智能技术迅猛发展,大语言模型与多模态生成技术的深度融合正在重塑各行各业的创作范式。其中,智能演示文稿(PPT)生成作为AI办公自动化的重要方向,正经历从“模板填充”到“智能体自主创作”的根本性变革…

2026/7/5 7:06:01 阅读更多 →
收放板机如何应对特殊板件——从超薄板到厚铜板的取放策略

收放板机如何应对特殊板件——从超薄板到厚铜板的取放策略

背景PCB制造中,收放板机面对的板件规格跨度极大。内层芯板薄至0.05mm,刚性极低,拿在手里都感觉会折;外层厚铜板可达8.0mm,重量大,对夹持力有较高要求。同一台设备要在不同规格之间稳定取放,靠的…

2026/7/5 7:06:01 阅读更多 →
2026年实践,合韵汤泉与海鲜自助结合后表现如何?

2026年实践,合韵汤泉与海鲜自助结合后表现如何?

2026年,合韵汤泉与海鲜自助结合后的表现非常出色。作为国内首家海洋主题微度假汤泉生活馆,北京合韵汤泉通过引入海鲜自助等高端餐饮服务,不仅提升了顾客的整体体验,还显著增加了其市场竞争力。表现亮点提升综合体验:海…

2026/7/5 7:04:00 阅读更多 →
Python社交网络分析:从脏数据清洗到图构建的七道硬核工序

Python社交网络分析:从脏数据清洗到图构建的七道硬核工序

1. 这不是“画个关系图”就完事的——为什么用Python做社交网络分析,90%的人连数据清洗这关都过不去“Social Network Analysis in Python”这个标题听起来很学术、很技术,但如果你真把它当成一门“学几个networkx函数就能发论文”的速成课,那…

2026/7/5 7:02:00 阅读更多 →

日新闻

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/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

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

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

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

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

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

2026/7/5 0:07:38 阅读更多 →

周新闻

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/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

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

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

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

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

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

2026/7/5 0:07:38 阅读更多 →

月新闻