news 2026/4/18 12:01:34

信创环境下SpringBoot大文件上传的加密存储方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
信创环境下SpringBoot大文件上传的加密存储方案

大文件传输系统技术方案

作为项目负责人,结合集团国产化、高安全、强兼容的刚性需求,我主导设计了基于SpringBoot+Vue2+信创云存储的分布式文件传输系统方案,以下为关键技术实现与代码示例:


一、核心架构设计

  1. 分层架构

    • 前端层:Vue2 CLI(兼容JSP/Net WebForm动态渲染)
    • 网关层:Nginx动态分片代理(解决IE8兼容性问题)
    • 服务层:SpringBoot微服务(拆分传输/存储/安全模块)
    • 存储层:华为OBS+本地NFS双活架构
  2. 国产化适配

    org.bouncycastle bcprov-jdk15on 1.70 com.huaweicloud esdk-obs-java 3.23.9

二、关键功能实现

1. 大文件分片传输(兼容IE8)

前端实现(Vue2 + WebSocket)

// src/utils/fileUploader.jsclassFileChunkUploader{constructor(file,options){this.file=file;this.chunkSize=options.chunkSize||5*1024*1024;// 5MB分片this.md5Worker=newWorker('/static/md5.worker.js');// Web Worker计算MD5this.initWebSocket();}// 兼容IE8的XMLHttpRequest分片上传uploadViaXHR(){constchunks=Math.ceil(this.file.size/this.chunkSize);for(leti=0;i<chunks;i++){constblob=this.file.slice(i*this.chunkSize,(i+1)*this.chunkSize);constfd=newFormData();fd.append('chunk',blob);fd.append('index',i);fd.append('chunks',chunks);fd.append('md5',this.fileMd5);constxhr=newXMLHttpRequest();xhr.open('POST','/api/upload/chunk',false);// 同步请求兼容IE8xhr.send(fd);}}// 进度持久化(localStorage + IndexedDB双备份)saveProgress(){constprogress={fileId:this.fileMd5,uploadedChunks:this.uploadedChunks,totalChunks:this.totalChunks};localStorage.setItem(`progress_${this.fileMd5}`,JSON.stringify(progress));// IndexedDB备份(IE10+)if(window.indexedDB){constrequest=indexedDB.open('FileProgressDB',1);request.onsuccess=(e)=>{constdb=e.target.result;consttx=db.transaction('progress','readwrite');conststore=tx.objectStore('progress');store.put(progress,this.fileMd5);};}}}

后端实现(SpringBoot)

// FileChunkController.java@RestController@RequestMapping("/api/upload")publicclassFileChunkController{@AutowiredprivateFileStorageServicestorageService;@PostMapping("/chunk")publicResponseEntityuploadChunk(@RequestParam("chunk")MultipartFilechunk,@RequestParam("index")intindex,@RequestParam("chunks")inttotalChunks,@RequestParam("md5")StringfileMd5){// 信创环境路径处理StringtempPath="/opt/file-server/temp/"+fileMd5+"/"+index;FilechunkFile=newFile(tempPath);chunk.transferTo(chunkFile);// 记录分片信息到Redis(断点续传)redisTemplate.opsForSet().add("file:"+fileMd5+":chunks",index);returnResponseEntity.ok().build();}@PostMapping("/merge")publicResponseEntitymergeFile(@RequestParam("md5")StringfileMd5,@RequestParam("fileName")StringfileName){// SM4加密存储StringencryptedPath=storageService.encryptAndStore(fileMd5,fileName);// 清理临时分片storageService.cleanChunks(fileMd5);returnResponseEntity.ok(encryptedPath);}}
2. 国产化加密存储(SM4+AES双算法)
// CryptoService.java@ServicepublicclassCryptoService{// SM4国密加密(支持信创环境)publicbyte[]sm4Encrypt(byte[]data,Stringkey)throwsException{SM4Engineengine=newSM4Engine();BufferedBlockCiphercipher=newPaddedBufferedBlockCipher(newCBCBlockCipher(engine));cipher.init(true,newParametersWithIV(newKeyParameter(key.getBytes()),newbyte[16]));byte[]output=newbyte[cipher.getOutputSize(data.length)];intlen=cipher.processBytes(data,0,data.length,output,0);len+=cipher.doFinal(output,len);returnArrays.copyOf(output,len);}// AES加密(兼容旧系统)publicbyte[]aesEncrypt(byte[]data,Stringkey)throwsException{SecretKeySpecsecretKey=newSecretKeySpec(key.getBytes(),"AES");Ciphercipher=Cipher.getInstance("AES/CBC/PKCS5Padding");cipher.init(Cipher.ENCRYPT_MODE,secretKey,newIvParameterSpec(newbyte[16]));returncipher.doFinal(data);}}
3. 信创数据库动态配置
# application-db.yml 动态数据源配置spring:datasource:dynamic:primary:masterdatasource:master:url:jdbc:mysql://${DB_HOST:localhost}:3306/file_dbdriver-class-name:com.mysql.cj.jdbc.Driverdm:url:jdbc:dm://${DM_HOST:localhost}:5236/FILEDBdriver-class-name:dm.jdbc.driver.DmDriverkingbase:url:jdbc:kingbase://${KB_HOST:localhost}:5432/filedbdriver-class-name:com.kingbase.jdbc.Driver
// DynamicDataSourceConfig.java@ConfigurationpublicclassDynamicDataSourceConfig{@Bean@ConfigurationProperties("spring.datasource.dynamic.datasource.master")publicDataSourcemasterDataSource(){returnDataSourceBuilder.create().build();}@Bean@ConfigurationProperties("spring.datasource.dynamic.datasource.dm")publicDataSourcedmDataSource(){returnDataSourceBuilder.create().build();}@BeanpublicDataSourcedynamicDataSource(){MaptargetDataSources=newHashMap<>();targetDataSources.put("master",masterDataSource());targetDataSources.put("dm",dmDataSource());DynamicDataSourcedataSource=newDynamicDataSource();dataSource.setTargetDataSources(targetDataSources);dataSource.setDefaultTargetDataSource(masterDataSource());returndataSource;}}

三、信创环境适配方案

  1. 浏览器兼容矩阵

    浏览器传输方案加密方案
    IE8XMLHttpRequest同步上传AES-128-CBC
    Firefox 52+Fetch API + Web WorkerSM4-CBC
    奇安信浏览器WebSocket分片国密SSL证书
  2. 操作系统适配

    # Dockerfile(统信UOS适配) FROM uos/openjdk:8-jdk RUN apt-get update && \ apt-get install -y libsm4-jni && \ mkdir -p /opt/file-server/temp COPY target/file-server.jar /opt/file-server/ CMD ["java", "-jar", "/opt/file-server/file-server.jar"]

四、供应商选型标准

根据集团要求,供应商需满足:

  1. 资质文件

    • 5个央企案例合同(需包含XX部委/国家电网/中石油等)
    • 信创产品认证证书(华为鲲鹏/飞腾/龙芯兼容认证)
    • SM4算法商用密码使用许可证
  2. 技术要求

    • 提供完整源代码(含WebUploader替代方案)
    • 支持IE8的ActiveX控件方案(备选)
    • 华为OBS存储深度优化经验
  3. 商务条款

    • 源代码授权费用 ≤160万/年
    • 提供5年免费升级服务
    • 现场实施团队需具备PK体系认证

五、实施路线图

  1. 试点阶段(1个月)

    • 在统信UOS+达梦数据库环境部署验证
    • 完成100G文件传输压力测试(目标50MB/s)
  2. 推广阶段(3个月)

    • 集成至集团现有20个业务系统
    • 培训30名内部开发人员
  3. 优化阶段(持续)

    • 开发信创浏览器专用插件
    • 实现量子加密传输预研

该方案已通过集团技术委员会评审,下一步将启动供应商招标工作。预计项目实施后,可降低文件传输成本70%,同时满足等保2.0三级要求。

SQL示例

创建数据库

配置数据库连接

自动下载maven依赖

启动项目

启动成功

访问及测试

默认页面接口定义

在浏览器中访问

数据表中的数据

效果预览

文件上传

文件刷新续传

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

文件夹上传

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

批量下载

支持文件批量下载

下载续传

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

文件夹下载

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

示例下载

下载完整示例

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 3:13:39

【PHP与工业通信协议深度整合】:实现秒级数据上传的终极方案

第一章&#xff1a;PHP与工业通信协议融合的背景与意义 随着工业自动化与信息化深度融合&#xff0c;传统工业控制系统正逐步向智能化、网络化方向演进。在这一背景下&#xff0c;将广泛应用于Web开发的PHP语言引入工业通信领域&#xff0c;成为连接企业资源计划&#xff08;ER…

作者头像 李华
网站建设 2026/4/18 5:07:38

PHP温控系统部署避坑指南(5大常见故障与修复方案)

第一章&#xff1a;PHP智能家居温度控制概述在现代物联网&#xff08;IoT&#xff09;应用中&#xff0c;智能家居系统逐渐成为家庭自动化的重要组成部分。其中&#xff0c;温度控制作为核心功能之一&#xff0c;直接影响居住舒适度与能源效率。PHP 作为一种广泛使用的服务器端…

作者头像 李华
网站建设 2026/4/18 6:23:09

依图科技医疗影像分析:HeyGem生成放射科医生讲解视频

依图科技医疗影像分析&#xff1a;HeyGem生成放射科医生讲解视频 在三甲医院的放射科诊室外&#xff0c;一位患者紧皱眉头盯着手中的CT报告——“右肺上叶磨玻璃结节&#xff0c;直径约6mm”——这些术语像密码一样难以解读。他反复翻看&#xff0c;却始终无法判断这是否意味着…

作者头像 李华
网站建设 2026/4/17 13:52:00

搜索角色+下拉选择+添加到列表(带‘新增’标签)

要实现“搜索角色下拉选择添加到列表&#xff08;带‘新增’标签&#xff09;”的功能&#xff0c;可基于VueElement UI封装组件&#xff0c;以下是贴合截图效果的完整实现&#xff1a; 一、Vue组件代码&#xff08;RoleAddWithNewTag.vue&#xff09; <template><div…

作者头像 李华
网站建设 2026/4/18 6:30:39

歌尔股份VR设备:HeyGem生成元宇宙交互体验视频

歌尔股份VR设备&#xff1a;HeyGem生成元宇宙交互体验视频 在虚拟现实内容生产仍被高昂成本和复杂流程束缚的今天&#xff0c;歌尔股份正悄然推动一场“平民化数字人革命”。其合作开发的HeyGem系统&#xff0c;让一个普通人上传一段音频、一段视频&#xff0c;几分钟内就能生成…

作者头像 李华
网站建设 2026/4/18 8:39:19

【企业级PHP监控实践】:资深架构师揭秘告警配置的8大陷阱与规避策略

第一章&#xff1a;企业级PHP监控体系的核心价值在现代高并发、分布式架构广泛应用的背景下&#xff0c;PHP作为支撑大量Web应用的核心语言之一&#xff0c;其运行时稳定性与性能表现直接影响用户体验与业务连续性。构建一套完整的企业级PHP监控体系&#xff0c;不仅是技术运维…

作者头像 李华