news 2026/4/17 10:15:10

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/4/18 1:18:56

PHP构建高性能物联网网关全攻略(MQTT协议深度集成方案)

第一章:PHP构建高性能物联网网关概述 在物联网(IoT)系统架构中,网关作为连接终端设备与云端服务的核心枢纽,承担着数据聚合、协议转换和边缘计算等关键职责。传统认知中,PHP 多用于 Web 后端开发&#xff0…

作者头像 李华
网站建设 2026/4/18 0:06:34

锡伯语射箭训练营:教练数字人指导基本功练习

锡伯语射箭训练营:教练数字人指导基本功练习 —— HeyGem 数字人视频生成系统技术解析 在新疆伊犁的某个锡伯族村落里,一位年过六旬的老射箭教练正用母语讲解“握弓时虎口要贴紧握把”的动作要领。他的声音被录下,而影像却不再局限于一人一课…

作者头像 李华
网站建设 2026/4/16 16:19:48

C#跨平台调试生死线,拦截器日志追踪的3步精准定位法

第一章:C#跨平台调试的挑战与现状随着 .NET Core 的推出,C# 语言正式迈入跨平台开发时代。开发者可以在 Windows、Linux 和 macOS 上构建和运行 C# 应用程序,但随之而来的调试复杂性也显著增加。不同操作系统底层机制的差异、调试器兼容性问题…

作者头像 李华
网站建设 2026/4/17 17:28:39

塔吉克语水利灌溉系统:农民数字人分享节水经验

塔吉克语水利灌溉系统:农民数字人分享节水经验 在中亚的山间梯田上,一位“老农”正用流利的塔吉克语讲解滴灌系统的安装要点——他语气平和、口型自然,仿佛正在田头手把手教学。但仔细观察你会发现,这位“农民讲师”其实从未开口…

作者头像 李华
网站建设 2026/4/5 13:53:11

PHP 8.7性能实测:从TPS到内存占用,全方位对比分析

第一章:PHP 8.7性能实测:从TPS到内存占用,全方位对比分析测试环境搭建 本次性能测试基于标准化服务器环境进行,确保结果具备可比性。操作系统采用 Ubuntu 22.04 LTS,内核版本 5.15,CPU 为 Intel Xeon Gold …

作者头像 李华
网站建设 2026/4/12 0:11:03

2026专科生必备!10个降AI率工具测评榜单

2026专科生必备!10个降AI率工具测评榜单 2026年专科生降AI率工具测评:为何需要专业工具? 随着高校和科研机构对AIGC内容检测的重视程度不断提升,论文、报告甚至作业中的AI生成痕迹越来越容易被识别。对于专科生而言,这…

作者头像 李华