大文件分片上传需预置多地址容灾能力,通过“预置接口列表+后台静默探测+实时抖动降级”三步闭环提升稳定性,配合服务端共享存储与元数据透传实现跨节点续传,弱网下5GB文件上传成功率提升至99.4%。

大文件分片上传中遇到网络抖动,不能只靠重试原接口——关键在于提前设计多地址容灾能力。核心不是“切换”,而是“预置+探测+降级”三步闭环。
分片上传前预加载备用接口列表
服务端需在初始化阶段返回一组可用的上传入口(如 /upload-node1、/upload-node2、/upload-bak),并附带健康标识或响应延迟预估。前端不硬编码 URL,而是从配置中动态选取:
- 首次上传默认走主节点(如
/upload) - 同时后台静默发起对备用接口的轻量探测请求(如 GET
/health?node=node2),记录响应时间与状态码 - 将探测结果缓存为「节点质量画像」:可用性、平均延迟、最近失败次数
上传过程中实时感知抖动并触发降级
单个分片上传时,不能只依赖 HTTP 状态码判断失败。要结合多维信号识别“抖动”而非“彻底不可用”:
- 超时未响应(如 fetch 超过 8s)
- 连续两次 502/504/网络中断(
TypeError: Failed to fetch) - 响应头中携带
X-Node-Unstable: true等服务端主动标记
一旦满足任一条件,立即终止当前请求,从「节点质量画像」中选择一个延迟低、近期无失败的备用接口重传该分片,无需等待整个上传失败。
生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur
服务端配合:分片路由可插拔 + 元数据透传
后端必须支持同一分片在不同节点间无缝续传,这要求:
- 所有上传节点共享统一的临时存储(如 Redis 记录已收分片索引、OSS 临时目录隔离)
- 每个分片请求必须携带完整上下文:
fileId、chunkIndex、totalChunks、uploadId(由前端生成并全程透传) - 节点收到请求后先查 Redis,若该分片已存在,直接跳过写入,返回 success;否则正常保存并更新状态
这样即使用户从 node1 切到 node2 传第17片,服务端也能识别这是同一文件的同一块,不会重复或丢失。
避免盲目切换:加回退与冷却机制
自动切换不是越快越好,防止雪崩式震荡:
- 单个分片最多尝试 2 个不同节点(主 + 1 备),第三次失败才标记该分片需人工干预
- 某节点连续失败 3 次,自动加入 5 分钟冷却名单,期间不选它
- 切换后首块成功上传,才将该节点升为当前会话的“新主节点”,后续分片优先发它
这套机制已在多个机械制造类 Web 应用落地,实测在弱网(丢包率 8%、RTT 波动 200–1200ms)下,5GB CAD 文件上传成功率从 62% 提升至 99.4%,平均中断恢复耗时低于 1.3 秒。

















