news 2026/4/3 6:26:13

机械制造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/3/31 14:54:04

金融保险SpringCloud如何安全上传大文件?

从我们开源以来&#xff0c;目前已经得到吉利,比亚迪,小红书,中兴,东软等国内各领域一线头部企业的强烈关注。 今天早上又有网友加我微信&#xff0c;也是想了解一下这块的技术和方案&#xff0c;也不知道这位老哥是从哪里找到的我的微信号&#xff0c;虽然在网上已经公开了&am…

作者头像 李华
网站建设 2026/3/31 22:36:59

文献内容:基于非对称纳什谈判的多微网电能共享运行优化策略。 #在 MATLAB 平台上进行算例仿真

文献内容&#xff1a;基于非对称纳什谈判的多微网电能共享运行优化策略。 #在 MATLAB 平台上进行算例仿真&#xff0c;通过 Yalmip 工具与 CPLEX 求解器进行建模与求解。 说明&#xff1a;完美复现文献内容&#xff0c;注释完整清晰代码修改性强 微电网抱团取暖这事儿听起来挺…

作者头像 李华
网站建设 2026/3/9 23:28:28

收藏!DeepSeek引领大模型爆发,AI算法岗成程序员薪资天花板

随着DeepSeek等头部大模型技术的持续突破与落地&#xff0c;生成式AI与大模型赛道迎来全面爆发期&#xff0c;大模型算法工程师这一核心岗位再度站上风口&#xff0c;迎来职业生涯的“黄金爆发期”&#xff0c;成为程序员群体转型与入行的优选方向。 2026届校招最新数据直观印…

作者头像 李华
网站建设 2026/3/26 3:02:30

无感观测器未来发展趋势

电机控制技术正朝着更智能、更精确、更可靠的方向发展,其核心的状态观测器技术也随之演进。下面这个表格汇总了四大技术趋势的核心特点,帮你快速把握全局。 技术方向 核心目标 关键技术 主要挑战 混合观测器策略​ 全速域高性能覆盖 滑模观测器(SMO)与高频注入(HFI)融合…

作者头像 李华
网站建设 2026/3/31 0:20:38

Claude开发入门 01,初识 Claude:零基础快速搭建软件开发辅助工作流

在 AI 与编程深度融合的当下&#xff0c;Claude 早已不止是“聊天写代码”的工具&#xff0c;更是能贯穿开发全流程的生产力助手。对于零基础开发者而言&#xff0c;无需复杂配置&#xff0c;就能借助 Claude 搭建起规范、高效的辅助工作流&#xff0c;把重复工作交给 AI&#…

作者头像 李华
网站建设 2026/3/14 22:03:16

ShareX(免费截图录屏软件)

ShareX 是一款免费的屏幕截图和屏幕录制工具&#xff0c;可用于创建高质量的屏幕截图、动画 GIF 和屏幕录像&#xff0c;并提供多种上传选项&#xff0c;使用户能够轻松地将它们共享到互联网上。除此之外&#xff0c;它还支持多种自定义功能&#xff0c;例如图像编辑、颜色拾取…

作者头像 李华