当前位置: 首页 > news >正文

机械制造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依赖

启动项目

启动成功

访问及测试

默认页面接口定义

在浏览器中访问

数据表中的数据

效果预览

文件上传

文件刷新续传

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

文件夹上传

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

批量下载

支持文件批量下载

下载续传

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

文件夹下载

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

示例下载

下载完整示例

http://www.jsqmd.com/news/312276/

相关文章:

  • 航空航天SpringCloud如何上传大文件文档?
  • 能源化工SpringMVC如何上传大文件报告?
  • 如何配置KindEditor实现WORD图片直接复制粘贴?
  • 聊聊天津实力强的房屋整装公司推荐,圣朝装饰值得关注
  • 网页编辑器KindEditor如何处理WORD文档中的图片粘贴?
  • 2026年陕西秦西盟薄壁不锈钢水管技术强品牌推荐
  • 聊聊上海合适的婚恋公司服务,哪家性价比高一看便知
  • UEDITOR的ELECTRON版本源码中,WORD图片转存逻辑是怎样的?
  • 前端网页开发中,KindEditor如何无缝接收WORD图片?
  • SE11自定义域范围值的空值问题
  • 全网最全继续教育一键生成论文工具TOP9:9款深度测评与推荐
  • Vue3+Cesium+turf 实现缓冲区分析
  • Vue3+Cesium实现可调整的迁徙图
  • 深拷贝浅拷贝 - 实践
  • 2026年河道护坡新选择:高评价石笼网厂家推荐,锌铝合金石笼网/抗冲击抗腐蚀石笼网,河道护坡石笼网直销厂家找哪家
  • 自动化构建、测试、部署(上) - 教程
  • 【日记】托朋友们的福,去雪山玩了一下(584 字)
  • 基于AI动态预测模型:机构锚定6000美元目标,黄金上涨引擎全面激活
  • 月底提醒:PDF 发票合并整理别拖到下月
  • 2026年环保运输车评测:哪家履带运输车公司更胜一筹?,市政除雪设备/农用履带运输车,运输车产销一体厂家哪家售后好
  • 混合观测器策略
  • 2026年上海激光清洗机十大制造商品牌推荐,圣同智能实力上榜
  • 首本鸿蒙架构师培养手册《鸿蒙架构师修炼之道》简介
  • 分析胜灵机械的运营模式如何,其产品性价比高吗?
  • 红黑树从入门到进阶:4 条规则如何筑牢 O (logN) 效率根基? - 详解
  • 说说高性价比的高档商业空间装修专业公司推荐
  • 聊聊智能密集架生产厂技术排名,华鑫环宇实力上榜
  • 2026年蓝奥环保设备性价比排名,南京蓝奥节能效果好不好
  • 利用某头部券商平台的CSRF漏洞:从发现到规模化攻击
  • 2026年泉州留学中介,专业表现与排名因素值得关注