大文件分片上传老是传一半断:分片合并、MD5 秒传与断点续传的实践

简介: 整文件上传在弱网下传到一半就断、重传又从头来。这次把上传改成按 5MB 切片、先传整文件 MD5 做秒传命中、所有片传完再按片号合并并二次校验 MD5,记录分片大小、秒传校验和断点续传几个实际踩过的坑。

周四晚上八点多,运营同学发消息:"客户又在群里投诉了,那个几百兆的资料包传到 90% 就断,重传又从头来,已经折腾三回了。"我打开后台日志一看,确实有个上传任务在 400 多兆的时候连接超时断了,而之前的上传逻辑是整文件一次 POST,断了就得重来,客户那边进度条每次都回到 0。这次是在乔拓云的轻应用上搭的资料上传后台,我主要负责把整文件上传改成分片 + 秒传 + 断点续传,前后改了两个版本。## 一、为什么整文件上传在弱网下必断整文件一次上传的问题是:请求体太大,连接一旦超时或网络抖动,整个请求失败,服务端已经收到的那部分数据全部作废。文件越大,在途时间越长,失败概率越高。分片上传的思路是把文件切成小块,每块单独上传,任何一块失败只重传那一块,而不是整个文件。这就是 HTTP 分块传输和断点续传的基本思路。## 二、分片怎么切,大小怎么定前端把文件按固定大小切片,我用的 chunkSize = 5MB。每片带一个全局唯一的 uploadId、片号 chunkIndex 和文件整体的 MD5。txt// 前端切片逻辑chunkSize = 5 * 1024 * 1024totalChunks = ceil(file.size / chunkSize)for i in 0..totalChunks: chunk = file.slice(i*chunkSize, (i+1)*chunkSize) uploadChunk(uploadId, i, chunk, fileMd5)chunkSize 不能太小:太小会导致请求数量暴涨,单连接开销大;太大则断点重传的尾部损失大。5MB 在我这台 5M 上行带宽的环境下,单片上传约 8 秒,比较平衡。## 三、秒传:先传 MD5,命中就直接返回秒传的核心是"文件内容已经传过就不用再传"。前端先算整个文件的 MD5,上传前先调一个校验接口问服务端:这个 MD5 的文件存不存在。txtPOST /checkMd5{ "fileMd5": "d41d8cd98f00b204e9800998ecf8427e", "fileName": "xx.zip" }// 命中返回:{ "exists": true, "url": "https://..." }// 未命中返回:{ "exists": false, "uploadId": "xxxx" }命中就直接把已有的文件地址返回给用户,前端一秒完成。这个机制下,同一份资料第二次传就是秒完成。## 四、合并:所有片传完再合并每片上传成功后服务端记录片号,等 totalChunks 全部传完,前端通知服务端合并。合并时按 chunkIndex 顺序拼接成完整文件,再算一次合并后文件的 MD5,和前端传上来的 fileMd5 比对,一致才算成功。txtPOST /merge{ "uploadId": "xxxx", "fileMd5": "d41d..." }// 服务端:按 chunkIndex 排序拼接 -> 校验 md5 -> 落库## 五、踩坑清单1. chunkSize 拍太小:一个 500MB 文件切成 1KB 片会发出 50 万个请求,直接把上传接口打挂,按单片 5-10 秒上传耗时定。2. 没做秒传校验:每次都从头传,客户重复传同一文件体验极差,必须先 checkMd5。3. 合并后不校验 MD5:某片传错或损坏,拼出来的文件就是坏的,必须合并后二次比对 MD5。4. 分片并发太高:前端同时开 10 个线程上传,服务端连接数瞬间飙满,我把并发限制到 3 个。5. 断点续传没记录已传片:重传时如果不查服务端已存哪些片,会把所有片重传一遍,等于没做续传。## 复盘- 大文件上传的稳定性来自"切片 + 单片重试 + 按片记录进度",而不是把超时时间调大。- 秒传靠文件 MD5 去重,合并后必须二次校验 MD5 保证完整性。- 分片并发要限制,否则省了断点却把服务端打挂。以上是个人实践记录,各平台具体功能以官方实时信息为准。一个开放问题:如果上传量再上去,服务端合并大文件时的磁盘 IO 和临时片清理就会成为瓶颈,你们在高并发分片上传场景下是怎么处理合并阶段的 IO 放大和临时文件回收的?

相关文章
|
11天前
|
人工智能 自然语言处理 安全
阿里云千问办公 QwenWork详细介绍:产品核心能力、典型场景、价格及常见问题解答
千问办公是阿里云推出的一站式AI办公平台,主打"不止于对话,更注重交付",依托通义千问旗舰大模型,用户一句话即可完成数据分析、PPT生成、视频剪辑等复杂任务,直接输出可用成果。产品深度打通钉钉生态与企业OA,覆盖桌面端、网页端,提供企业标准版198元/人/月等多档订阅方案,新用户注册即赠2000积分,适配工程师、HR、财务等多职业办公场景,成为能动手干活的"全能AI同事"。
|
10天前
|
人工智能
千问办公官网入口:阿里AI办公QwenWork产品页和免费网页端链接
千问办公官网含两大入口:一是网页端(qwenwork.cn),即开即用,支持浏览器直接访问;二是阿里云产品页 https://t.aliyun.com/U/JNKJuO 提供免费/付费版详情、功能介绍及使用指南。
|
17天前
|
网络协议 Linux iOS开发
【2026实测】Wireshark下载+安装+汉化+使用教程(图文版,巨详细)
Wireshark 是一款免费开源的网络协议分析工具,可实时捕获、解析并可视化数据包,助你诊断网络故障、分析通信协议(如HTTP、DNS、TCP等)。支持Windows/macOS/Linux,含中文界面,新手入门便捷。(239字)
|
9天前
|
IDE 开发工具
Qoder 上线 Sonus 模型,Computer Use 能力全面增强
Qoder国际版上线全新内置大模型Sonus(/ˈsoʊnəs/),全球领先,专精超长任务执行与电脑操作(Computer Use)。配合Qoder桌面端0.2.3版本,可自主完成编程、金融建模、科研及表格制作等复杂工作。现全面支持Qoder全系产品,效率提升3.2倍。
1114 1
Qoder 上线 Sonus 模型,Computer Use 能力全面增强
|
11天前
|
人工智能 API 内存技术
刚刚 DeepSeek V4.1 Flash 开启内测,1 分钟教你用上!
刚刚 DeepSeek 内测群发布了 DeepSeek V4.1 Flash 中间版本内测的消息,这次的模型采用了新的结构,原生支持多模态、能力更强、速度更快、且成本更低。
1949 15
|
12天前
|
缓存 人工智能 自然语言处理
阿里云qwen3.8-flash大模型介绍:模型能力、模型价格、免费额度与最新活动
本文是阿里云百炼平台Qwen3.8-Flash大模型的选型接入指南,作为兼顾性能与响应速度的高性价比多模态模型,它支持百万级上下文窗口、全场景多模态输入与完整智能体能力矩阵,适配编程辅助、智能体协作等核心场景。文中同步梳理了最新下调的阶梯定价、夜间4折等优惠活动,搭配OpenAI兼容流式调用示例,帮助开发者低成本快速落地高并发AI应用。
阿里云qwen3.8-flash大模型介绍:模型能力、模型价格、免费额度与最新活动
|
16天前
|
人工智能 运维 BI
阿里云千问办公QwenWork深度解析:基于Qwen3.8,六大核心能力重构企业全自动化工作流与计费选型指南
传统AI办公工具大多停留在对话问答、文档摘要、简单文案生成层面,只能完成单点碎片化任务,无法自主拆解复杂业务流程,很难串联多工具、多文档、外部业务系统完成端到端完整工作交付。很多企业在落地AI办公的时候,需要组合多款不同工具,来回切换界面,手动复制粘贴中间结果,智能化改造落地门槛居高不下。千问办公QwenWork是整合多款智能体产品能力打造的一体化企业办公智能体平台,底层基座依托Qwen3.8大模型,打通桌面端Agent、云端Agent、企业协同Agent三种运行形态,不再局限简单问答,接收业务目标之后自主拆解任务步骤,调用各类工具,处理文档、表格、浏览器自动化、数据查询,直接输出可交付的办公
1679 4
|
17天前
|
缓存 数据可视化 开发工具
DeepSeek Harness 怎么更新?dsh 更新完整指南:更新本体(npx、npm、源码)与更新插件两种方式
DeepSeek Harness 的更新分两层:本体更新(npx 自动最新、npm update -g、源码 git pull)与插件更新(插件市场点更新、命令行覆盖安装)。本文按「准备 → 更新本体 → 更新插件 → 更新后检查」四步走,覆盖新手常见疑问。
1939 1
DeepSeek Harness 怎么更新?dsh 更新完整指南:更新本体(npx、npm、源码)与更新插件两种方式
|
13天前
|
SQL 人工智能 前端开发
QoderWake 1.0 正式发布:从桌面里的 Agent,到工作现场的数字员工
QoderWake v1.0正式发布:企业级数字员工团队平台。支持“一句话建岗”,预置10类特训岗位;Waker常驻钉钉/飞书群,@即响应、自动协作、跨任务记忆;具备定时/事件/API多触发方式与统一任务看板;已沉淀27.6万条记忆、12.3万项技能,助力组织实现人机协同增效。
846 2
|
10天前
|
缓存 测试技术 API
DeepSeek V4.1 Flash 内测接入:改个模型名即可调用(附代码)
DeepSeek V4.1 Flash 内测不用申请,base_url 不变、改个模型名就能调,9/10 到期。本文讲清接入、计费限流与多模态注意点。
850 0
DeepSeek V4.1 Flash 内测接入:改个模型名即可调用(附代码)

热门文章

最新文章