news 2026/5/7 13:24:59

机械制造SpringMVC如何上传大文件BOM表?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
机械制造SpringMVC如何上传大文件BOM表?

大文件传输系统技术方案

作为项目负责人,结合集团国产化、高安全、强兼容的刚性需求,我主导设计了基于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/5/3 10:49:44

Vue3+Cesium实现可调整的迁徙图

本学习系列以Cesium Vue3 Typescriptelementplus作为主要技术栈&#xff0c;后续会循序渐进&#xff0c;持续探索Cesium的高级功能&#xff0c;敬请期待。欢迎关注威信公众号“webgis学习”。详情请查阅原文 Vue3Cesium实现可调整的迁徙图https://mp.weixin.qq.com/s/dXO7S7T…

作者头像 李华
网站建设 2026/5/1 22:51:21

C#每日面试题-Thread.Sleep和Task.Delay的区别

C#每日面试题-Thread.Sleep和Task.Delay的区别 在C#并发编程中&#xff0c;Thread.Sleep和Task.Delay是两个高频出现的“暂停执行”方法&#xff0c;看似功能相似&#xff0c;实则底层原理、线程行为、使用场景有本质差异。本文将从“易懂”角度拆解核心区别&#xff0c;再深入…

作者头像 李华
网站建设 2026/4/30 23:14:03

收藏!前端转大模型避坑指南:风口下的程序员破局之路

当下各行各业都面临着不小的压力&#xff0c;此前中金女员工跳楼事件持续发酵&#xff0c;频频冲上热搜引发全网热议。这一事件的背后&#xff0c;本质上是经济下行周期带来的普遍焦虑&#xff0c;咱们互联网行业更是首当其冲。尤其是程序员群体&#xff0c;本就被“35岁危机”…

作者头像 李华
网站建设 2026/5/2 15:23:01

计算机毕业设计 | SpringBoot+vue企业oa管理系统(附源码+论文)

1&#xff0c;绪论 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理企业OA管理系统的相关信息成为必…

作者头像 李华
网站建设 2026/5/6 3:21:49

Maple Flow 对比 MathCAD®

数学工具集对比模式对比Maple Flow 独有的功能连接从 Excel 运行 Flow 工作表为不熟悉 Flow 的用户提供一个更简单的电子表格界面从另一个 Flow 工作表运行 Flow 工作表轻松将您的分析模块化&#xff0c;并排查大型分析项目中的问题。将 Flow 工作表视为一个“函数”&#xff0…

作者头像 李华