唇枪舌剑30分钟:当“直男”遇上“直女”,火花四溅的脑力激荡

核心内容摘要

当泳装小南遇上“萌娘”长门:跨次元的夏日心动!
adn-622:白峰美羽与田渊正浩,灵魂共鸣的奇幻之旅

当“男生女生一起差”碰撞出奇妙的火花

大文件传输系统技术方案作为项目负责人结合集团国产化、高安全、强兼容的刚性需求我主导设计了基于SpringBootVue2信创云存储的分布式文件传输系统方案以下为

关键技术实现与代码示例

核心架构设计分层架构前端层Vue2 CLI兼容JSP/Net WebForm动态渲染网关层Nginx动态分片代理解决IE8兼容性问题服务层SpringBoot微服务拆分传输/存储/安全模块存储层华为OBS本地NFS双活架构国产化适配org.bouncycastle bcprov-jdk15on

70 com.huaweicloud esdk-obs-java

3.

2

9

关键功能实现

大文件分片传输兼容IE8前端实现Vue2 WebSocket// src/utils/fileUploader.jsclassFileChunkUploader{constructor(file,options){this.filefile;this.chunkSizeoptions.chunkSize||5*1024*1024;// 5MB分片this.md5WorkernewWorker(/static/md

worker.js);// Web Worker计算MD5this.initWebSocket();}// 兼容IE8的XMLHttpRequest分片上传uploadViaXHR(){constchunksMath.ceil(this.file.size/this.chunkSize);for(leti0;ichunks;i){constblobthis.file.slice(i*this.chunkSize,(i

*this.chunkSize);constfdnewFormData();fd.append(chunk,blob);fd.append(index,i);fd.append(chunks,chunks);fd.append(md5,this.fileMd

;constxhrnewXMLHttpRequest();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备份IE10if(window.indexedDB){constrequestindexedDB.open(FileProgressDB,

;request.onsuccess(e){constdbe.target.result;consttxdb.transaction(progress,readwrite);conststoretx.objectStore(progress);store.put(progress,this.fileMd

;};}}}后端实现SpringBoot// FileChunkController.javaRestControllerRequestMapping(/api/upload)publicclassFileChunkController{AutowiredprivateFileStorageServicestorageService;PostMapping(/chunk)publicResponseEntityuploadChunk(RequestParam(chunk)MultipartFilechunk,RequestParam(index)intindex,RequestParam(chunks)inttotalChunks,RequestParam(md

StringfileMd

{// 信创环境路径处理StringtempPath/opt/file-server/temp/fileMd5/index;FilechunkFilenewFile(tempPath);chunk.transferTo(chunkFile);// 记录分片信息到Redis断点续传redisTemplate.opsForSet().add(file:fileMd5:chunks,index);returnResponseEntity.ok().build();}PostMapping(/merge)publicResponseEntitymergeFile(RequestParam(md

StringfileMd5,RequestParam(fileName)StringfileName){// SM4加密存储StringencryptedPathstorageService.encryptAndStore(fileMd5,fileName);// 清理临时分片storageService.cleanChunks(fileMd

;returnResponseEntity.ok(encryptedPath);}}

国产化加密存储SM4AES双算法// CryptoService.javaServicepublicclassCryptoService{// SM4国密加密支持信创环境publicbyte[]sm4Encrypt(byte[]data,Stringkey)throwsException{SM4EngineenginenewSM4Engine();BufferedBlockCipherciphernewPaddedBufferedBlockCipher(newCBCBlockCipher(engine));cipher.init(true,newParametersWithIV(newKeyParameter(key.getBytes()),newbyte[16]));byte[]outputnewbyte[cipher.getOutputSize(data.length)];intlencipher.processBytes(data,0,data.length,output,

;lencipher.doFinal(output,len);returnArrays.copyOf(output,len);}// AES加密兼容旧系统publicbyte[]aesEncrypt(byte[]data,Stringkey)throwsException{SecretKeySpecsecretKeynewSecretKeySpec(key.getBytes(),AES);CiphercipherCipher.getInstance(AES/CBC/PKCS5Padding);cipher.init(Cipher.ENCRYPT_MODE,secretKey,newIvParameterSpec(newbyte[16]));returncipher.doFinal(data);}}

信创数据库动态配置# 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.javaConfigurationpublicclassDynamicDataSourceConfig{BeanConfigurationProperties(spring.datasource.dynamic.datasource.master)publicDataSourcemasterDataSource(){returnDataSourceBuilder.create().build();}BeanConfigurationProperties(spring.datasource.dynamic.datasource.dm)publicDataSourcedmDataSource(){returnDataSourceBuilder.create().build();}BeanpublicDataSourcedynamicDataSource(){MaptargetDataSourcesnewHashMap();targetDataSources.put(master,masterDataSource());targetDataSources.put(dm,dmDataSource());DynamicDataSourcedataSourcenewDynamicDataSource();dataSource.setTargetDataSources(targetDataSources);dataSource.setDefaultTargetDataSource(masterDataSource());returndataSource;}}

信创环境适配方案浏览器兼容矩阵浏览器传输方案加密方案IE8XMLHttpRequest同步上传AES-128-CBCFirefox 52Fetch API Web WorkerSM4-CBC奇安信浏览器WebSocket分片国密SSL证书操作系统适配# 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]

供应商选型标准根据集团要求供应商需满足资质文件5个央企案例合同需包含XX部委/国家电网/中石油等信创产品认证证书华为鲲鹏/飞腾/龙芯兼容认证SM4算法商用密码使用许可证技术要求提供完整源代码含WebUploader替代方案支持IE8的ActiveX控件方案备选华为OBS存储深度优化经验商务条款源代码授权费用 ≤160万/年提供5年免费升级服务现场实施团队需具备PK体系认证

实施路线图试点阶段1个月在统信UOS达梦数据库环境部署验证完成100G文件传输压力测试目标50MB/s推广阶段3个月集成至集团现有20个业务系统培训30名内部开发人员优化阶段持续开发信创浏览器专用插件实现量子加密传输预研该方案已通过集团技术委员会评审下一步将启动供应商招标工作。

预计项目实施后可降低文件传输成本70%同时满足等保

0三级要求。

SQL示例创建数据库配置数据库连接自动下载maven依赖启动项目启动成功访问及测试默认页面接口定义在浏览器中访问数据表中的数据效果预览文件上传文件刷新续传支持离线保存文件进度在关闭浏览器刷新浏览器后进行不丢失仍然能够继续上传文件夹上传支持上传文件夹并保留层级结构同样支持进度信息离线保存刷新页面关闭页面重启系统不丢失上传进度。

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

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

示例下载下载完整示例

九·幺9.1免费版-九·幺9.1免费版应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123