溯仑智算
溯仑智算 SU.RUN开发者文档
获取接入支持
溯仑智算
溯仑智算 SU.RUN
开发者文档
开始使用
文档中心
阅读路径、接入顺序与专题总览
存储接入快速开始
第一次接入时优先阅读
存储接入总览
能力边界、使用路径与整体说明
本地配置与验证指南
在本地完成示例接口与最小验证
上传与下载
授权上传指南
浏览器、App 与客户端上传方式
授权下载指南
受控下载、权限判断与短时授权
前端直传安全规范
长期密钥保护与权限边界
大文件上传实战
大文件上传、重试与断点续传
规划与治理
文件路径命名规范
存储桶、路径、目录与归档规则
自定义域名接入
品牌化访问、证书与上线准备
接口说明
服务端接入方式、鉴权边界与返回结构
最小后端接入示例
上传下载授权与确认入库的完整串联
代码示例
JavaScript、Python 与 Go 接入示例
AI 与工作流
AI 环境接入说明
常见 AI 环境的接入说明
AI 训练数据与结果回写规范
模型、数据集、日志与输出治理
排障与帮助
错误码与问题排查
常见异常定位与恢复建议
接入常见问题总览
按角色整理的常见问题说明
支持中心
获取接入支持
获取接入支持
开始使用
文档中心存储接入快速开始存储接入总览本地配置与验证指南
上传与下载
授权上传指南授权下载指南前端直传安全规范大文件上传实战
规划与治理
文件路径命名规范自定义域名接入接口说明最小后端接入示例代码示例
AI 与工作流
AI 环境接入说明AI 训练数据与结果回写规范
排障与帮助
错误码与问题排查接入常见问题总览
当前文档
大文件上传、重试与断点续传
文档中心

大文件上传实战

当文件较大、上传时间较长或网络不稳定时,分段上传通常比单次上传更稳定,也更适合大文件业务和 AI 数据导入。

上传策略
support@su.run

大文件上传 / 断点续传 / 媒体与模型文件接入

更适合大文件

当文件体积较大时,单次上传对网络波动非常敏感。分段上传可以把一次失败收敛到少量分段,而不是整文件重传。

更适合长时间任务

视频源文件、模型权重、训练数据集这类文件通常上传时间较长。分段上传更容易实现进度、重试和断点续传能力。

更适合任务系统

系统已经具备任务队列或 AI 工作流时,大文件写入存储服务通常更适合使用分段上传,而不是单次 PUT。

适用场景

哪些文件一开始就适合使用分段上传

  • 视频、压缩包、媒体源文件。
  • 模型权重、大型训练数据集。
  • 网络不稳定、需要断点续传的上传场景。

建议流程

初始化、上传和合并三个阶段分别做什么

  • 服务端初始化分段上传会话。
  • 前端或任务系统按段并发上传。
  • 失败分段允许单独重试。
  • 全部分段完成后由服务端确认合并。

分段大小建议

先从 8MB 到 32MB 起步

常见起点是 8MB 到 32MB。过小会带来过多请求,过大又会降低失败重试的收益。

并发数量建议

浏览器并发先求稳再求快

浏览器一般建议 3 到 6 个并发分段,任务机或后端服务可以根据网络和机器资源适度提高。

文件路径建议

objectKey 在初始化阶段一次定死

初始化时就确定 objectKey,不要让每个分段单独决定路径。大文件尤其需要稳定的目录和命名规则。

初始化上传会话

后端返回 uploadId、objectKey 和 partSize

POST /api/storage/multipart/init
{
  "fileName": "training-dataset.zip",
  "contentType": "application/zip",
  "size": 2684354560
}

{
  "success": true,
  "uploadId": "upload_xxx",
  "bucket": "training-assets",
  "objectKey": "datasets/project-a/2026-06/training-dataset.zip",
  "partSize": 10485760,
  "requestId": "req_xxx"
}

上传单个分段

每个分段都需要记录 etag

PUT uploadUrl(partNumber=1)
Content-Type: application/zip

<binary chunk>

完成分段合并

完成 complete 后文件才可正常使用

POST /api/storage/multipart/complete
{
  "uploadId": "upload_xxx",
  "objectKey": "datasets/project-a/2026-06/training-dataset.zip",
  "parts": [
    { "partNumber": 1, "etag": "etag-1" },
    { "partNumber": 2, "etag": "etag-2" }
  ]
}

第一步:初始化上传会话

会话参数为什么必须由后端签发

由服务端生成 uploadId、objectKey、partSize 和 requestId。浏览器或任务机只消费这些结果,不自行决定分段规则。

POST /api/storage/multipart/init
{
  "fileName": "training-dataset.zip",
  "contentType": "application/zip",
  "size": 2684354560
}

{
  "success": true,
  "uploadId": "upload_xxx",
  "bucket": "training-assets",
  "objectKey": "datasets/project-a/2026-06/training-dataset.zip",
  "partSize": 10485760,
  "requestId": "req_xxx"
}

第二步:按段上传并记录 etag

etag 为什么是 complete 的必要输入

每个分段都应拿到自己的 uploadUrl 或上传参数,成功后记录 partNumber 与 etag,供 complete 阶段使用。

PUT uploadUrl(partNumber=1)
Content-Type: application/zip

<binary chunk>

第三步:服务端确认 complete

complete 为什么不能让前端随意跳过

complete 不是可选步骤。只有当全部分段的 etag 都被提交并完成合并,文件才真正成为可下载、可读取的完整内容。

POST /api/storage/multipart/complete
{
  "uploadId": "upload_xxx",
  "objectKey": "datasets/project-a/2026-06/training-dataset.zip",
  "parts": [
    { "partNumber": 1, "etag": "etag-1" },
    { "partNumber": 2, "etag": "etag-2" }
  ]
}

前端或任务机上传示例

上传端只负责按段 PUT,不负责决定文件归属

实际上传时,建议由前端或任务系统按段提交,并在全部成功后统一调用 complete。

for (const part of parts) {
  const chunk = file.slice(part.start, part.end);

  const response = await fetch(part.uploadUrl, {
    method: 'PUT',
    body: chunk,
  });

  uploadedParts.push({
    partNumber: part.partNumber,
    etag: response.headers.get('etag'),
  });
}

await fetch('/api/storage/multipart/complete', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    uploadId,
    objectKey,
    parts: uploadedParts,
  }),
});

重试与断点续传建议

哪些状态需要持久化,断线后才能继续上传

  • 失败时只重传失败分段,不重传已完成分段。
  • 上传过程中持续保存 uploadedParts、uploadId 和 objectKey,便于断点续传。
  • 如果 uploadId 过期或会话被服务端清理,再重新初始化,不要混用旧分段记录。
  • 对于 AI 数据集、媒资源文件这类长任务,建议配合任务状态和过期策略一起管理。

常见坑位

最容易把分段上传做成半成品的地方

  • 分段大小过小,导致请求数过多、整体效率反而下降。
  • 前端上传完全部分段后,没有调用 complete,导致文件一直停留在未完成状态。
  • 失败分段没有单独重试,而是整文件重新上传,白白浪费时间和流量。
  • 初始化返回的 objectKey 没被后端统一收口,导致大文件落到混乱目录里。

上线检查清单

上线前一定要走完的最小验证集

  • 初始化、分段上传、完成合并三个步骤都有 requestId。
  • 失败分段支持单独重试,不需要整文件重来。
  • 上传会话超时后有清理或过期策略。
  • 大文件路径规划符合数据集、媒资或模型目录规范。
  • 上传完成后仍由业务后端确认入库或进入下一步任务。

complete 返回失败

先核对 uploadId、parts 和 etag

优先检查 parts 数组是否完整、etag 是否来自同一 uploadId,以及 partNumber 是否按正确顺序提交。

部分分段持续失败

优先排查分段大小与并发数

优先检查分段大小是否过大、并发数是否过高,以及当前网络环境是否稳定。浏览器同时开启过多分段,反而容易整体变慢。

断点续传恢复后仍报错

重点检查 uploadId 是否已经失效

优先确认本地缓存的 uploadId 是否仍然有效,或者服务端是否已经清理过期上传会话。分段续传必须与同一个 uploadId 对齐。

上传成功但业务里找不到

上传成功不等于业务已经入库

这通常不是分段上传本身失败,而是 complete 之后没有走业务确认入库,或者文件路径与业务主记录没有绑定起来。

接入常见问题

哪些场景适合优先使用分段上传?

没有绝对阈值,但大文件、长时上传、网络波动较大或需要断点续传的场景,通常更适合使用分段上传。

分段上传是否必须由前端执行?

不一定。浏览器、任务机、容器和后端服务都可以执行分段上传。关键是由服务端统一初始化会话并收口 objectKey。

上传完成后为什么还要 complete?

因为各分段只是临时上传完成,真正的文件要在 complete 之后才会被合并成一个可正常使用的结果。

上一篇
前端直传安全规范
长期密钥保护与权限边界
下一篇
文件路径命名规范
存储桶、路径、目录与归档规则
更多帮助

你可能还需要这些帮助入口

文档中心帮助你完成接入,客户服务页帮助你了解采购、支持与服务信息。

邮件支持

需要迁移协助或接入支持时,可以直接进入邮件支持入口。

进入支持中心

客户常见问题

采购、测试申请、迁移安排与售后问题,可先查看这份常见问题说明。

查看常见问题

价格与采购说明

需要确认容量区间、采购方式、续费与对账说明时,可从这里继续查看。

查看价格说明