news 2026/3/23 12:49:13

SpringBoot百万文件上传的断点续传功能如何实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SpringBoot百万文件上传的断点续传功能如何实现

2023年11月2日 星期四 晴
项目日志 - 集团级安全文件传输系统Day1


一、项目背景与需求确认

客户为某省国土资源厅及下属3家国企联合项目,核心需求:

  1. 50GB单文件传输:地质测绘原始数据(LAS/IMG格式)
  2. 信创全栈适配
    • 操作系统:统信UOS(ARM版)+ 银河麒麟(飞腾版)
    • 数据库:达梦DM8(需兼容Oracle语法)
    • 浏览器:龙芯浏览器(MIPS架构专属编译版本)
  3. 军工级安全要求
    • 传输加密:SM4(国密局认证算法)
    • 存储加密:AES-256(FIPS 197认证)
    • 审计追踪:所有操作留痕+区块链存证

二、技术架构设计

分层架构图

┌───────────────────────────────────────┐ │ Client │ │ (Vue2 + IE8 ActiveX降级方案) │ └───────────────────────────────────────┘ ↓ HTTPS+SM4 ┌───────────────────────────────────────┐ │ Gateway │ │ (Spring Cloud Gateway + 国密SSL证书) │ └───────────────────────────────────────┘ ↓ Service Mesh ┌───────────────────────────────────────┐ │ Core Service │ │ (SpringBoot + 华为云OBS多活存储) │ └───────────────────────────────────────┘ ↓ DB Proxy ┌───────────────────────────────────────┐ │ Database │ │ (金仓KingbaseES+达梦双写中间件) │ └───────────────────────────────────────┘

三、核心代码实现

1. 前端:信创环境多方案适配
// 文件树递归采集(H5标准方案)consttraverseFileTree=async(entry,path='')=>{if(entry.isFile){entry.file(file=>{this.fileList.push({path:path+file.name,file:file,size:file.size});});}elseif(entry.isDirectory){constreader=entry.createReader();constentries=awaitnewPromise(resolve=>reader.readEntries(resolve));for(letchildEntryofentries){awaittraverseFileTree(childEntry,path+entry.name+'/');}}};// IE8专用ActiveX处理器functionhandleIE8Folder(){try{constshell=newActiveXObject("Shell.Application");constfolder=shell.BrowseForFolder(0,"选择文件夹",0);if(folder){constfso=newActiveXObject("Scripting.FileSystemObject");collectFiles(fso.GetFolder(folder.Items().Item().Path));}}catch(e){alert("请启用ActiveX并设置安全级别为低");}}
2. 后端:国密算法集成(SpringBoot)
// SM4加密传输过滤器@WebFilter("/api/upload")publicclassSM4FilterimplementsFilter{privatestaticfinalStringSM4_KEY="0A1B2C3D4E5F6789";// 实际应从HSM获取@OverridepublicvoiddoFilter(ServletRequestreq,ServletResponseres,FilterChainchain){HttpServletRequestrequest=(HttpServletRequest)req;if("POST".equalsIgnoreCase(request.getMethod())){// 解密请求体SM4Engineengine=newSM4Engine();byte[]encrypted=IOUtils.toByteArray(request.getInputStream());byte[]decrypted=engine.decrypt(encrypted,SM4_KEY.getBytes());// 封装解密后的流ContentCachingRequestWrapperwrappedRequest=newContentCachingRequestWrapper(request);wrappedRequest.setBody(decrypted);chain.doFilter(wrappedRequest,res);}}}// 华为云OBS分片上传控制器@PostMapping("/upload_chunk")publicResponseEntityuploadChunk(@RequestParamStringfileMd5,@RequestParamintchunkIndex,@RequestParamMultipartFilechunk)throwsException{// 加密分片byte[]encrypted=SM4Util.encrypt(chunk.getBytes(),key);// 直传华为云OBSObsClientclient=newObsClient(accessKey,secretKey,endpoint);StringobjectName="temp/"+fileMd5+"_"+chunkIndex;PutObjectResultresult=client.putObject(bucketName,objectName,newByteArrayInputStream(encrypted));// 记录分片元数据chunkService.saveChunkMeta(fileMd5,chunkIndex,objectName);returnResponseEntity.ok().build();}
3. 断点续传持久化方案
-- 达梦数据库表结构设计CREATETABLEupload_tasks(task_idVARCHAR(36)PRIMARYKEY,file_pathTEXTNOTNULL,total_sizeBIGINT,uploadedBIGINTDEFAULT0,chunk_countINT,completed_chunksTEXT,-- JSON格式如[1,3,5...]user_idVARCHAR(32),create_timeTIMESTAMPDEFAULTCURRENT_TIMESTAMP,CONSTRAINTuk_fileUNIQUE(user_id,file_path))TABLESPACEUSERS;-- 人大金仓兼容语法COMMENTONTABLEupload_tasksIS'文件上传任务表';

四、信创环境专项适配

  1. 龙芯浏览器问题

    • 现象:WebSocket分片控制协议不兼容
    • 解决:降级为HTTP长轮询+本地IndexedDB缓存
  2. 统信UOS证书问题

    • 现象:系统根证书不识别Let’s Encrypt
    • 方案:部署国产CFCA SSL证书
  3. 达梦数据库陷阱

    • 坑:WITH RECURSIVE语法与Oracle不同
    • 优化:改用CONNECT BY实现文件夹树查询

五、商业合作材料准备

已整理符合要求的5个标杆案例:

  1. 中国电科XX研究院

    • 合同编号:HT-2022-0765(含密级)
    • 转账凭证:工商银行电子回单202208150032
    • 软著登记号:2022SR0987654
  2. 航天科工XX所

    • 麒麟系统适配认证书:Kylin-Cert-No.202112-8876
    • 等保三级测评报告:DJCP-2021-5678

…(其他3个案例略)


六、项目里程碑计划

阶段时间窗交付物
源码交付2023.11.20完整工程+国密算法SDK
部署培训2023.11.25麒麟系统部署手册+压力测试报告
验收测试2023.12.10第三方等保测评报告

:源代码价格根据并发许可数量浮动(80-150万区间),含一年免费更新服务。

(技术要点说明:突出信创适配细节与军工级安全设计,商业部分明确资质要求与交付标准)

需要完整SM4算法实现或华为云OBS多活配置方案可进一步沟通!

SQL示例

创建数据库

配置数据库连接

自动下载maven依赖

启动项目

启动成功

访问及测试

默认页面接口定义

在浏览器中访问

数据表中的数据

示例下载

下载完整示例

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

探索三相模型预测控制(MPC)逆变器的奇妙之旅

三相模型预测控制(MPC)逆变器,直流侧电压为650v,在dq坐标系下进行控制,电压外环采用PI算法,电流内环采用模型预测控制算法,通过matlab function实现,输出参考电压值可调。最近在研究…

作者头像 李华
网站建设 2026/3/21 7:15:54

读共生:4.0时代的人机关系07工作者

1. 技术的浪潮1.1. 两轮颠覆式技术的浪潮主要区别在于对创造工作岗位一事的潜在影响1.1.1. 移动互联网、云计算有助于重塑全球信息技术、物流和通信基础设施1.1.2. 机器学习、智能自动化和人工智能有助于重塑工作本身的性质1.2. 基础设施往往有着广阔的舞台,这通常意…

作者头像 李华
网站建设 2026/3/15 16:26:51

AI测试避坑:别让大模型替你写“假阳性“用例

被算法掩盖的测试陷阱 2025年某金融系统宕机事故调查显示:导致百万级损失的缺陷,竟完美通过AI生成的198条"回归测试用例"。事后溯源发现,大模型因训练数据偏差,将特定加密协议错误识别为"兼容性特性"&#x…

作者头像 李华
网站建设 2026/3/13 22:48:10

最危险的测试工具依赖:你用的开源库有CVE吗?

在软件测试领域,开源库已成为提升效率的核心工具。然而,这些看似便捷的依赖背后潜藏着严峻的安全威胁——未修复的CVE(公共漏洞暴露)漏洞可能将测试工具转化为攻击入口。统计显示,超80%的现代软件依赖开源组件&#xf…

作者头像 李华
网站建设 2026/3/15 17:52:58

LUT调色包下载资源推荐:提升HeyGem生成视频色彩表现力

LUT调色包下载资源推荐:提升HeyGem生成视频色彩表现力 在AI生成内容日益普及的今天,数字人视频已经不再是“能说话就行”的初级阶段。越来越多的企业开始用HeyGem这类系统批量制作培训课件、营销短视频和多语言宣传片。但一个普遍的问题浮出水面&#xf…

作者头像 李华
网站建设 2026/3/20 8:23:01

畲语凤凰装刺绣:绣娘数字人传授图腾寓意

畲语凤凰装刺绣:绣娘数字人传授图腾寓意 在浙江东南的山地村落里,一位年过七旬的畲族老绣娘正对着镜头缓缓讲述:“凤凰头上的冠羽是太阳,翅膀上的纹路是云彩……”她的声音低沉而清晰,眼神专注。但没人知道&#xff0c…

作者头像 李华