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

接口说明

本文档面向需要做正式业务接入、平台封装和长期维护的团队,重点说明密钥管理、鉴权分层、签名授权、文件路径组织、返回结构约定和错误映射方式,便于前端、服务端、任务系统与内部后台围绕同一套接口模型稳定协作。

接口支持
support@su.run

组织级接入 / 回调设计 / 批量导入 / 自动化任务支持

文档覆盖重点

为什么建议先通过服务端接入

这份文档的重点不是让前端直接调用底层接口,而是帮助团队围绕 SU.RUN 的存储能力设计一层稳定的服务端接入层。通过服务端统一权限、路径、日志、错误结构和 requestId 约定,前端调用会更清晰,后续扩展账单、审计、队列任务和多组织能力时也更容易保持一致。

适用团队

本文档适用于已经具备后端框架的接入团队,也适用于正在搭建第一版服务端接口的项目。字段结构、鉴权边界、错误模型和日志约定均可直接作为默认实施规范。

建议优先统一的能力
业务后端接口层

建议在业务服务端封装 `/api/storage/presign-upload`、`/api/storage/presign-download`、`/api/storage/object-metadata` 这类接口,让前端始终通过业务语义访问存储能力。

任务系统与异步作业

如果有转码、清洗、批处理、训练、索引等长任务,建议由任务系统持有平台接入参数,在服务端完成对象读写、回调与审计。

企业后台或管理系统

如平台内部还需要资产管理、素材中心、知识库后台或计费协同系统,建议统一复用一套服务端接入层,而不是每个系统各自接入。

适用场景

  • 需要为 Web、App、小程序或管理后台统一封装上传下载接口的团队
  • 需要把存储能力接入业务系统、任务系统或内部管理平台的团队
  • 需要长期维护权限、路径、日志、错误结构和多组织隔离规则的项目

文档收获

  • 明确服务端应该统一处理哪些鉴权、路径和返回结构问题
  • 拿到适合正式项目使用的上传、下载和元数据接口参考结构
  • 建立 requestId、错误码、日志字段和长期密钥管理的统一约定

控制台操作位置

API 接入通常围绕控制台中的接入参数、组织信息和账单主体展开。先确认这些基础信息,再继续设计服务端接口、请求结构和权限边界,会更适合正式项目长期维护。

访问密钥与接入域名
控制台首页 -> 存储管理 -> 访问密钥
  • 服务端初始化 S3 客户端时使用。
  • 建议按环境和业务系统分开管理密钥。
  • 上线前先完成最小上传、下载与权限验证。
账单与组织协同
控制台首页 -> 费用中心 -> 账单中心
  • 适合做内部系统的账单同步和对账衔接。
  • 不要把组织级信息直接暴露给终端用户。
  • 业务系统只返回前端真正需要的字段。

文件接口

最常用的是 S3 兼容文件接口,用于上传、下载、列目录、删除文件、分段上传和授权下载。这一层适合应用程序、媒体处理服务、训练脚本和自动化任务直接接入。

组织级接入

如需将平台能力集成到业务后台,例如自动生成上传授权、统一下发文件路径、拉取账单结果或完成业务审计,建议通过服务端接入组织级能力,再向前端暴露业务接口。

访问控制

长期密钥建议仅保存在服务端。浏览器、小程序和移动端不直接保存访问密钥,而是通过业务服务端获取短期授权或授权链接。

接入交付

对于多项目、多团队或品牌合作场景,建议先定义统一的桶命名、目录前缀、权限策略和回写路径,再开始批量接入。

建议接入步骤

STEP 1
由业务服务端保存接入域名、访问密钥 ID 与访问密钥。
STEP 2
在业务后端封装上传、下载、授权链接和文件路径规则。
STEP 3
前端、App、小程序只调用业务接口,不直接持有长期密钥。
STEP 4
统一错误格式、请求日志和文件路径,便于后续排障与审计。

为什么建议先做服务端封装

在正式项目中,上传、下载、元数据读取和任务回写通常都会涉及权限、文件路径、错误结构和日志统一。先完成一层服务端封装,后续前端、App、任务系统、运营后台和管理系统会更容易共用同一套规则,避免每个入口各自处理一遍鉴权和路径逻辑。

常见错误做法

  • 让前端直接持有长期密钥,或者直接拼接关键 objectKey 路径。
  • 上传、下载、元数据接口各自返回一套字段,导致前端和后台很难复用。
  • 只做上传授权,不做确认入库、日志记录和错误映射,后续排查成本很高。

正式环境建议

  • 统一由服务端生成 objectKey、bucket、expiresIn 和 requestId,不让客户端决定关键路径。
  • 把上传授权、下载授权、元数据查询和确认入库做成固定接口层,供多个入口复用。
  • 上线前先完成测试存储桶验证、多组织隔离校验和日志字段核对,再接正式业务流量。

鉴权分层建议

长期凭证、业务身份、临时授权分别由谁负责

  • 平台侧长期凭证:由业务服务端、任务机或受控容器持有。
  • 业务侧用户身份:由统一身份系统、组织体系和 RBAC 决定谁能上传、谁能下载、谁能删除。
  • 临时访问授权:通过授权 URL 或短时业务授权交给浏览器、App、小程序或第三方系统。

接入原则

正式项目里最容易被忽略的四条底线

  • 所有请求都要带组织授权,不把跨组织资源直接暴露给客户端。
  • 业务系统只消费平台字段,不依赖内部运维字段或供应链信息。
  • 错误提示统一做业务映射,不把底层错误直接返回给终端用户。
  • 需要批量导入、迁移或大规模任务时,优先走服务端队列与异步回调。

推荐封装的上传接口

输入建议包含业务对象类型、文件名、Content-Type、组织或项目上下文;输出建议包含 bucket、objectKey、uploadUrl、expiresIn、requestId。

推荐封装的下载接口

输入建议包含对象标识、业务归属和下载人身份;输出建议包含 bucket、objectKey、downloadUrl、expiresIn、requestId,并在后端完成权限检查。

推荐封装的元数据接口

如果前端需要展示文件名、大小、更新时间、下载状态,建议由业务后端查询并整理成统一结构,而不是把底层字段直接透给前端。

仓库对照

上传授权 Demo Route

/api/storage/presign-upload

仓库里已提供最小 POST 示例路由,演示如何在登录用户上下文下生成上传授权、收口 objectKey,并返回统一结果结构。

仓库对照

确认入库 Demo Route

/api/storage/confirm-upload

仓库里已提供最小 POST 示例路由,演示如何校验 objectKey 属于当前用户目录、确认对象存在,并返回统一 asset 结构。

仓库对照

下载授权 Demo Route

/api/storage/presign-download

仓库里已提供最小 POST 示例路由,演示如何在服务端完成权限收口后,再签发短时 downloadUrl。

示例 Route 需要的环境变量

当前仓库里的示例 route 会读取下面这组环境变量。可以把它们理解为文档示例与实际代码对齐时所需的基础运行配置,也可以作为你在本地或测试环境搭第一版接口时的参考命名方式。

推荐的本地变量命名

SURUN_S3_ENDPOINT=https://your-s3-endpoint
SURUN_S3_REGION=auto
SURUN_ACCESS_KEY_ID=your-access-key
SURUN_SECRET_ACCESS_KEY=your-secret-key
SURUN_DEFAULT_BUCKET=media-assets

上传接口

上传接口的目标不是简单返回一个 uploadUrl,而是把业务身份、对象路径、文件类型、有效期和 requestId 一次性收口。这样前端、移动端和任务系统都能复用同一套上传逻辑。

上传接口应该校验什么

建议至少校验文件名、Content-Type、业务归属和文件路径生成规则,避免不同业务线把文件写进混乱目录。

推荐请求结构

POST /api/storage/presign-upload
{
  "fileName": "cover.png",
  "contentType": "image/png",
  "resourceType": "project-cover",
  "projectId": "proj_xxx"
}

推荐返回结构

{
  "success": true,
  "bucket": "media-assets",
  "objectKey": "projects/proj_xxx/covers/2026/06/cover.png",
  "uploadUrl": "https://your-upload-url",
  "expiresIn": 600,
  "requestId": "req_xxx"
}

下载接口

下载接口的重点在于权限判断。真正应该由后端决定的是“谁可以下载哪个对象、下载多久、是否需要审计”,而不是只返回一个可以直接跳转的 URL。

下载接口应该限制什么

建议后端先确认当前用户、组织、项目和文件归属,再决定是否签发短时下载授权,而不是只看 objectKey 是否存在。

推荐请求结构

POST /api/storage/presign-download
{
  "objectKey": "projects/proj_xxx/covers/2026/06/cover.png",
  "resourceType": "project-cover",
  "projectId": "proj_xxx"
}

推荐返回结构

{
  "success": true,
  "bucket": "media-assets",
  "objectKey": "projects/proj_xxx/covers/2026/06/cover.png",
  "downloadUrl": "https://your-download-url",
  "expiresIn": 300,
  "requestId": "req_xxx"
}

元数据接口

元数据接口适合给前端或后台展示文件名、大小、更新时间、业务归属和下载状态。推荐由业务服务端做统一整理,而不是把底层字段直接透给页面。

元数据接口应该返回什么

建议只返回前端真正渲染需要的字段,例如文件名、大小、更新时间和可下载状态,不把内部映射字段直接透出。

推荐返回结构

{
  "success": true,
  "object": {
    "bucket": "media-assets",
    "objectKey": "projects/proj_xxx/covers/2026/06/cover.png",
    "fileName": "cover.png",
    "size": 248731,
    "contentType": "image/png",
    "updatedAt": "2026-06-10T08:00:00.000Z",
    "downloadable": true
  },
  "requestId": "req_xxx"
}

上传授权接口

最小 route handler 结构

建议由业务服务端统一签发授权结果,再交给前端或任务系统使用。

export async function POST() {
  const uploadUrl = await createUploadUrl();

  return Response.json({
    success: true,
    bucket: 'media-assets',
    objectKey: 'uploads/2026/06/avatar.png',
    uploadUrl,
    expiresIn: 600,
  });
}

下载授权接口

最小 route handler 结构

建议由业务服务端统一签发授权结果,再交给前端或任务系统使用。

export async function GET() {
  const downloadUrl = await createDownloadUrl();

  return Response.json({
    success: true,
    bucket: 'media-assets',
    objectKey: 'projects/2026/06/cover.png',
    downloadUrl,
    expiresIn: 300,
  });
}

第一层:认证与业务身份

请求先到业务后端,由后端识别当前用户、组织、项目或任务身份。上传下载是否允许,不在客户端决定。

第二层:对象路径与授权生成

后端根据业务语义生成 objectKey,并统一决定 bucket、有效期、Content-Type、requestId 和授权类型。

第三层:对象写入与业务确认

客户端拿到 uploadUrl 或 downloadUrl 之后,只负责执行对象读写。真正的业务完成状态,仍然由后端确认入库或回写。

上传结果

上传成功后前端最少要拿到哪些字段

建议业务接口返回统一结果结构,便于前端、任务队列和日志系统处理。

{
  "success": true,
  "bucket": "media-assets",
  "objectKey": "projects/2026/06/cover.png",
  "etag": "...",
  "size": 248731,
  "requestId": "req_xxx"
}

下载授权

下载授权返回后前端该怎么消费

建议业务接口返回统一结果结构,便于前端、任务队列和日志系统处理。

{
  "success": true,
  "bucket": "media-assets",
  "objectKey": "projects/2026/06/cover.png",
  "downloadUrl": "https://your-download-url",
  "expiresIn": 600
}

错误结构建议

建议业务接口统一返回一致的错误结构,便于前端、后台和任务系统使用同一种方式处理失败。底层细节建议保留在日志中,不直接展示给终端用户。

统一错误体的最低要求

{
  "success": false,
  "error": {
    "code": "DOWNLOAD_LINK_EXPIRED",
    "message": "下载地址已过期,请重新获取。",
    "retryable": true
  },
  "requestId": "req_xxx"
}

接口设计建议

字段命名与 requestId 约定

  • 对象 Key 由后端统一生成,前端上传时不自己拼关键业务路径。
  • 接口返回字段保持稳定,避免今天返回 object_key,明天改成 key,导致前端到处兼容。
  • 所有上传下载接口都建议带 requestId,便于跨服务定位问题。
  • 多组织、多项目或多环境场景,建议在服务端路由层统一收口这些维度。

错误与日志规范

面向用户的错误提示与面向排查的日志信息

  • 对终端用户只暴露业务级错误,例如“没有权限上传此目录”“文件类型不允许”“下载地址已过期”。
  • 如需进一步定位问题,可在日志里记录 requestId、bucket、objectKey、组织标识和内部错误码。
  • 不要把任何底层错误详情、供应链语义或内部字段直接下发给浏览器。
  • 长任务失败时建议带上状态与可重试信息,例如 pending、processing、completed、failed。

日志与问题定位建议

签发上传下载授权时建议记录哪些日志

  • 每次签发上传或下载授权都带 requestId。
  • 日志至少记录 bucket、objectKey、当前用户或任务身份。
  • 上传完成后记录 confirm-upload 或业务绑定动作。
  • 下载授权建议记录对象归属、授权有效期和下载人身份。

建议错误码目录

示例 route 当前覆盖的基础错误码集合

INVALID_REQUEST_BODY
请求参数格式不正确,请检查后重试。

用于请求 JSON 结构错误、缺少必要字段或字段类型不匹配。

INVALID_PRESIGN_UPLOAD_REQUEST
上传授权请求参数不完整或不合法。

用于 fileName、contentType、resourceType 等字段校验失败。

OBJECT_ACCESS_DENIED
当前对象不在允许访问的示例目录下,无法签发下载授权。

用于后端权限判断未通过,或 objectKey 超出当前用户可访问范围。

UPLOADED_OBJECT_NOT_FOUND
上传对象不存在或尚未写入完成,暂时无法确认入库。

用于 confirm-upload 回查对象失败,通常说明 PUT 尚未成功或 objectKey 填写错误。

DEMO_STORAGE_UNAVAILABLE
当前授权示例接口暂不可用。

用于示例环境变量未配置,或演示存储配置不可用。

建议的接入方式

前后端分离团队的推荐接入模式

前后端分离团队建议由前端仅调用业务 API,由后端负责校验用户身份、决定文件路径、生成上传下载授权,并记录 requestId 和审计日志。这样调用边界更清晰,后端职责也更稳定。

存在任务队列或 AI 作业的场景,建议把存储能力封装成统一的服务模块,例如 `storageService.createUploadUrl()`、`storageService.createDownloadUrl()`、`storageService.copyObject()`。这样无论是控制台、后台、脚本还是任务系统,都可以使用一致的调用方式,后续扩展账单、审计或容量策略时也更容易维护。

SECURITY NOTICE

服务端签名与安全边界

  • 组织级接口建议只在服务端开放,浏览器只访问业务 API。
  • 前端直传、下载授权、批量处理都要先经过服务端签名与路径校验。
  • 任何底层错误都要映射成平台级或业务级提示,不能直接透给终端用户。
  • 如果需要批量导入或长任务,优先走任务队列和异步回调,不要让前端直接轮询底层接口。

接入常见问题

为什么 API 文档没有直接提供大量管理接口地址?

正式产品更稳定的方式是由业务服务端统一处理组织级能力,再向前端暴露业务接口。这样权限、审计、错误处理和字段口径都更可控。

前端能不能直接拿授权地址上传?

可以,但授权地址必须由业务服务端签发。浏览器不能直接保存长期密钥,也不应自行决定关键文件路径。

下载授权接口需要返回哪些字段?

最少建议返回 bucket、objectKey、downloadUrl、expiresIn 和 requestId,这样前端和日志系统都能保持一致口径。

上一篇
自定义域名接入
品牌化访问、证书与上线准备
下一篇
最小后端接入示例
上传下载授权与确认入库的完整串联
更多帮助

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

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

邮件支持

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

进入支持中心

客户常见问题

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

查看常见问题

价格与采购说明

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

查看价格说明