大文件分片上传老是传一半断:分片合并、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 放大和临时文件回收的?

相关文章
|
29天前
|
人工智能 自然语言处理 数据挖掘
阿里云Token Plan:39元/月起全档位拆解,个人与团队版定价权益全解析
本文详解阿里云百炼Token Plan大模型订阅服务,该服务以Credits统一计量全模态模型调用消耗,分为39元/月起的个人版与150元/席/月起的团队版,配套Harness专属开发权益,兼容主流AI编程与智能体工具,同时清晰梳理其与Coding Plan的定位差异、适配场景及低成本选购全攻略,帮助个人开发者与企业团队实现大模型调用成本优化与预算可控。
|
1月前
|
SQL 搜索推荐 关系型数据库
后台列表页突然慢了三倍:explain 执行计划、索引下推与最左前缀失效的排查
后台列表页突然慢了三倍,慢查询日志显示一条平时几十毫秒的 SQL 跑了 4 秒。这次用 explain 定位到 type=ALL 全表扫,顺着最左前缀、索引下推 extra 和深翻页 LIMIT offset 三个点改,把执行计划从 ALL 拉回 ref,记下五个实际踩过的坑。
|
1月前
|
人工智能 API 语音技术
阿里云百炼Harness权益手册:联网搜索 / 图像生成等工具额度、升配折算、常见问题整理
阿里云百炼TokenPlan个人版Standard/Pro套餐新增12类Harness权益,涵盖联网搜索、图像生成、语音合成等工具,享每月免费额度及超量88折后付费,独立计量、不扣Credits。阿里云百炼Token Plan官网:https://t.aliyun.com/U/EsRjVx
100 0
|
1月前
|
JavaScript 物联网 Java
从扫码枪到射频读卡器:手把手实现企业级 RFID 资产盘点系统
本文详解RFID盘点在EAM系统中的工程落地:对比条码“一枪一码”,RFID实现“走动即盘点”,但需重构业务逻辑——聚焦批量读取、静默处理、漏读容错与集合比对。以开源首码EAM为例,剖析PDA硬件抽象、节流去重、路由式状态判定及6大实战坑点,助力企业高效升级资产盘点。(239字)
123 0
|
1月前
|
JSON 小程序 API
同城小程序开发:云上静态资源与接口怎么分开部署
同城小程序上云后,静态资源(Banner/主题)与业务接口(下单/配置)混部易致故障:改图需重启API、图片拖慢下单、回滚误伤订单。本文详解云上分离部署方案——静态走对象存储+CDN,接口走无状态服务,实现独立发布、弹性扩容与秒级回滚,保障高峰稳定与运营敏捷。
|
1月前
|
数据采集 人工智能 自然语言处理
拒绝盲目跟风!一文看懂国内数据治理厂商
本文以阿里云瓴羊Dataphin为样本,系统拆解数据治理平台选型难题:直击信息不对称痛点,提出“基础能力—效率提升—业务价值”三维评估框架;深入解析其OneData方法论、“建设即治理”路线及“三大支柱+AI引擎”架构,结合上汽大众、雅戈尔等落地案例,厘清适用边界与选型建议。(239字)
|
1月前
|
安全 物联网
账在 A、实在 B:跨公司资产调拨为何成为账实差异的最大来源
跨公司资产调拨是账实差异最大重灾区:责任真空、单据错位、账务归属脱节致“账在A、实在B”。需严控申请、审批、发运、接收四大节点,强化电子化单据与财务系统自动联动,方能堵住漏洞。(239字)
|
10月前
|
人工智能 API 开发者
阿里云百炼官网登录入口:首页和后台API管理调用控制台
阿里云百炼官网提供两大入口:一是平台介绍页,详述大模型能力、优势及定价,可免费领取最高5000万Tokens;二是管理控制台,用于获取API-KEY、调用API及查阅文档。开发者可通过对应链接快速开通服务并接入使用。
16657 1
|
4月前
|
人工智能 缓存 JSON
阿里云Qwen3.7-Plus简介:模型能力、适用场景、支持订阅计划与最新优惠
Qwen3.7-Plus是阿里云千问系列旗舰级多模态大模型,核心优势在于多模态交互混合智能体能力——可感知真实场景、操作GUI界面、基于视觉生成代码并端到端导航应用。模型支持1M tokens上下文、单图最高1600万像素、最长2小时视频输入,文本能力接近旗舰Max,视觉推理BabyVision得分较上代从37.4跃升至64.7,在Vision Arena榜单跻身全球前五、中国第一。目前已上线阿里云百炼,新人可免费试用100万tokens,推理服务限时8折(输入低至1.6元/百万tokens),适用于图像视频理解、智能体交互、OCR及自动化工作流等高阶场景。
|
10月前
|
机器学习/深度学习 存储 边缘计算
物联网平台实战:从设备接入到数据分析的端到端架构演进
本文详解物联网平台从设备接入到数据分析的架构演进路径,涵盖多协议接入、边缘计算、实时处理与AI集成等核心技术,分享高并发优化、分层存储、安全认证等实战经验,助力企业构建高效、可扩展的IoT系统,推动数字化转型与智能决策升级。(238字)

热门文章

最新文章