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

存储接入快速开始

SU.RUN 对外提供统一的存储服务接入能力。本页用于说明控制台准备项、最小验证步骤、授权接入方式与上线前检查要点,适合正式项目在早期建立稳定的接入基线。

接入支持
support@su.run

接入验证 / 迁移验证 / 密钥核对 / 上传下载验证

适用团队

本文档适用于第一次接入 SU.RUN 的团队,也适用于已经具备存储服务接入经验、但需要统一接入方式、权限边界与业务结构的项目。内容覆盖控制台准备、最小验证、授权链接、安全约束和上线清单,可直接作为第一版实施路径。

如后续还需补充前端直传、AI 训练、素材归档或自定义域名访问,可在最小链路验证完成后,再继续查阅 SDK 示例、接口说明和 AI 环境接入说明。

当前文档覆盖能力
  • 控制台开通存储服务,准备访问密钥与接入参数。
  • 使用标准 S3 SDK 完成文件上传、下载、列目录、删除和分段上传。
  • 通过业务服务端生成授权上传、下载地址,给浏览器、App 或第三方系统使用。
  • 按业务规划存储桶、文件路径、自定义域名和生命周期规则。
  • 将存储能力接入素材库、媒体处理、AI 训练、知识库、结果归档等真实业务。

接入前准备项

组织内已开通存储服务,并确认可用区域。
已在控制台创建存储账号与访问密钥。
已准备一个测试存储桶,先做最小上传与下载验证。
已在服务端保存接入域名、访问密钥 ID 与访问密钥。

接入域名

这是 SDK 与业务服务端连接存储服务的入口,可理解为平台提供的标准访问地址。上传、下载、列目录和签名计算都会基于它进行。

访问密钥 ID / 访问密钥

这是一组长期凭证,默认只应保存在业务服务端、任务机或受控容器中。正式项目不建议将其直接下发给浏览器、移动端或第三方插件。

存储桶与对象路径

存储桶决定资源归属,文件路径决定业务结构。稳定的桶名和前缀规划,比单纯把文件传上去更重要,因为后续审计、生命周期和 AI 工作流都会依赖这套结构。

授权地址

这是浏览器直传、临时下载和第三方受控接入最常用的能力。业务服务端先使用长期密钥生成短时有效的 URL,再交给客户端使用。

控制台操作位置

下面两处是接入初期最常用的控制台位置,分别用于准备访问密钥与创建测试存储桶。

访问密钥页面
控制台首页 -> 存储管理 -> 访问密钥
  • 创建专用接入密钥。
  • 记录访问密钥 ID 与访问密钥。
  • 不要把长期密钥直接放进浏览器。
存储桶页面
控制台首页 -> 存储管理 -> 存储桶
  • 先创建测试桶。
  • 按业务规划文件前缀。
  • 验证上传、下载和删除链路。

拿到接入参数

在控制台的访问密钥页面记录访问密钥 ID、访问密钥,并复制当前组织可用的接入域名。这组参数会作为后续 SDK、脚本和业务系统的统一入口。

先验证最小读写

建议不要一开始就接正式业务。先创建一个测试存储桶,完成一次上传、列目录、下载和删除,确认密钥权限、网络连通性和文件路径规划都正确。

再接入业务服务

当最小验证稳定后,再把存储能力接到图片、视频、素材库、训练数据或知识库业务里。这样排查时更容易区分是存储问题还是业务代码问题。

最后补安全与治理

生产环境建议仅在服务端持有访问密钥。前端上传通过服务端签发临时授权或授权链接,避免将长期密钥直接暴露给浏览器或 App。

推荐操作步骤

STEP 1
进入控制台,先确认组织已经开通存储服务并具备可用区域。
STEP 2
在访问密钥页面创建一组专用于接入验证的访问密钥 ID 与访问密钥。
STEP 3
创建一个测试存储桶,例如 demo-assets,并规划 test/health-check.txt 这样的文件路径。
STEP 4
在服务端用标准 S3 SDK 初始化客户端,先跑上传、列目录、下载与删除。
STEP 5
验证稳定后,再接业务接口、自定义域名、生命周期和生产权限策略。

建议先准备环境变量

无论使用 Node.js、Python、Go 还是后续的 AI 容器,建议都先把接入参数收口到环境变量。这样后续迁移环境、切换密钥或排查问题时,成本会低很多。

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

Node.js 初始化示例

import {
  S3Client,
  PutObjectCommand,
  ListObjectsV2Command,
  GetObjectCommand,
  DeleteObjectCommand,
} from '@aws-sdk/client-s3';

const client = new S3Client({
  region: 'auto',
  endpoint: process.env.SURUN_S3_ENDPOINT,
  credentials: {
    accessKeyId: process.env.SURUN_ACCESS_KEY_ID!,
    secretAccessKey: process.env.SURUN_SECRET_ACCESS_KEY!,
  },
});

export async function runHealthCheck() {
  await client.send(
    new PutObjectCommand({
      Bucket: process.env.SURUN_DEFAULT_BUCKET!,
      Key: 'test/health-check.txt',
      Body: 'ok',
      ContentType: 'text/plain',
    }),
  );

  await client.send(
    new ListObjectsV2Command({
      Bucket: process.env.SURUN_DEFAULT_BUCKET!,
      Prefix: 'test/',
    }),
  );

  await client.send(
    new GetObjectCommand({
      Bucket: process.env.SURUN_DEFAULT_BUCKET!,
      Key: 'test/health-check.txt',
    }),
  );

  await client.send(
    new DeleteObjectCommand({
      Bucket: process.env.SURUN_DEFAULT_BUCKET!,
      Key: 'test/health-check.txt',
    }),
  );
}

Python 初始化示例

import os
import boto3

client = boto3.client(
    's3',
    endpoint_url=os.environ['SURUN_S3_ENDPOINT'],
    aws_access_key_id=os.environ['SURUN_ACCESS_KEY_ID'],
    aws_secret_access_key=os.environ['SURUN_SECRET_ACCESS_KEY'],
    region_name='auto',
)

bucket = os.environ['SURUN_DEFAULT_BUCKET']
key = 'test/health-check.txt'

client.put_object(
    Bucket=bucket,
    Key=key,
    Body=b'ok',
    ContentType='text/plain',
)

client.list_objects_v2(Bucket=bucket, Prefix='test/')
client.get_object(Bucket=bucket, Key=key)
client.delete_object(Bucket=bucket, Key=key)

最小验证清单

1. 使用控制台提供的接入域名初始化 S3 客户端
2. 用访问密钥 ID / 访问密钥连接测试存储桶
3. 上传一个小文件到 test/health-check.txt
4. 列出 test/ 前缀,确认文件可见
5. 下载该文件并校验内容
6. 删除测试文件,确认清理完成

第一步:连通性与凭证验证

此阶段不接业务接口,仅使用最小 SDK 代码确认接入域名、访问密钥 ID、访问密钥和测试存储桶均可用。

const client = new S3Client({
  region: 'auto',
  endpoint: process.env.SURUN_S3_ENDPOINT,
  credentials: {
    accessKeyId: process.env.SURUN_ACCESS_KEY_ID!,
    secretAccessKey: process.env.SURUN_SECRET_ACCESS_KEY!,
  },
});

第二步:上传测试文件

建议固定使用一个明确的健康检查路径,例如 test/health-check.txt,后续所有环境都用同一套检查口径。

await client.send(
  new PutObjectCommand({
    Bucket: process.env.SURUN_DEFAULT_BUCKET!,
    Key: 'test/health-check.txt',
    Body: 'ok',
    ContentType: 'text/plain',
  }),
);

第三步:列目录、下载、删除

上传完成后再继续验证列目录、读取和删除,不要只测上传成功。正式项目最容易遗漏的就是“能写不能读”或“能读不能删”的权限差异。

await client.send(
  new ListObjectsV2Command({
    Bucket: process.env.SURUN_DEFAULT_BUCKET!,
    Prefix: 'test/',
  }),
);

await client.send(
  new GetObjectCommand({
    Bucket: process.env.SURUN_DEFAULT_BUCKET!,
    Key: 'test/health-check.txt',
  }),
);

await client.send(
  new DeleteObjectCommand({
    Bucket: process.env.SURUN_DEFAULT_BUCKET!,
    Key: 'test/health-check.txt',
  }),
);

存储桶命名建议

  • 按业务域拆桶,例如 media-assets、training-assets、user-uploads。
  • 避免一个桶承载完全不同的业务数据。
  • 生产与测试环境尽量拆分。

对象路径命名建议

  • 建议包含环境、业务线、日期,例如 prod/ugc/2026/06/cover.png。
  • 前端上传路径最好由后端统一生成。
  • AI 任务建议单独规划 models/、datasets/、outputs/。

服务端签发授权上传

前端直传文件时,先由业务服务端签发上传地址,再由浏览器把文件传到存储服务。

import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3';
import { getSignedUrl } from '@aws-sdk/s3-request-presigner';

const client = new S3Client({
  region: 'auto',
  endpoint: process.env.SURUN_S3_ENDPOINT,
  credentials: {
    accessKeyId: process.env.SURUN_ACCESS_KEY_ID!,
    secretAccessKey: process.env.SURUN_SECRET_ACCESS_KEY!,
  },
});

export async function createUploadUrl() {
  const command = new PutObjectCommand({
    Bucket: 'media-assets',
    Key: 'uploads/2026/06/avatar.png',
    ContentType: 'image/png',
  });

  return getSignedUrl(client, command, { expiresIn: 600 });
}

服务端签发授权下载

下载时同样由服务端生成短时可用地址,避免把长期凭证下发给客户端。

import { S3Client, GetObjectCommand } from '@aws-sdk/client-s3';
import { getSignedUrl } from '@aws-sdk/s3-request-presigner';

const client = new S3Client({
  region: 'auto',
  endpoint: process.env.SURUN_S3_ENDPOINT,
  credentials: {
    accessKeyId: process.env.SURUN_ACCESS_KEY_ID!,
    secretAccessKey: process.env.SURUN_SECRET_ACCESS_KEY!,
  },
});

export async function createDownloadUrl() {
  const command = new GetObjectCommand({
    Bucket: 'media-assets',
    Key: 'projects/2026/06/cover.png',
  });

  return getSignedUrl(client, command, { expiresIn: 300 });
}
SECURITY NOTICE

前端直传安全说明

  • 前端直传必须先走业务服务端签名接口,浏览器不能直接持有访问密钥。
  • 长期密钥建议按业务环境拆分,例如 dev、staging、prod 分开管理。
  • 授权地址必须设置过期时间,并校验桶名、文件路径和文件类型。
  • 如果接用户上传,建议由后端先生成文件路径,避免客户端任意写入关键目录。

为什么生产项目一定要走服务端签名

测试阶段若将长期密钥直接放入前端或临时脚本,虽然能够快速完成上传验证,但正式项目进入真实用户环境后会带来明显的权限失控风险。浏览器一旦获得长期密钥,任何人都可能绕过业务服务端,直接写入、覆盖或读取不应暴露的文件路径。

推荐做法是由业务服务端持有长期密钥,并根据业务身份、桶名、文件路径、文件类型和过期时间生成授权 URL。这样前端只获取一次性的上传或下载地址,权限可控、日志可追溯,后续审计、风控和问题排查也更清晰。

上线建议

  • 存储桶命名按业务拆分,例如 media-assets、training-datasets、user-uploads。
  • 文件路径建议包含环境、业务线与日期,方便归档和生命周期管理。
  • 模型、数据集、媒体素材建议分桶或分前缀隔离,避免权限混用。
  • 先把下载、删除、覆盖更新等真实动作都测一遍,再切正式流量。

初始化就连接失败

优先检查接入域名是否填写正确、服务端网络是否可达,以及环境变量是否真的被当前运行进程读取。

上传返回 403 或签名不通过

通常需要检查访问密钥 ID 与访问密钥是否配对错误、SDK endpoint 是否写错、bucket 名称是否误填,或者请求头与签名时使用的参数不一致。

能上传但列目录为空

优先确认 Bucket 和 Prefix 是否一致,另外检查你上传时的对象路径是否和读取时使用的前缀完全匹配。

测试通过,业务接入后又失败

这往往不是存储本身问题,而是业务系统加入了新的对象路径、权限判断、文件类型限制或下载授权逻辑。建议用 requestId 把最小验证日志和业务日志串起来看。

生产上线前检查清单

  • 测试桶已经完成上传、下载、列目录、删除四步验证。
  • 长期密钥只保存在服务端环境变量或密钥系统中。
  • 浏览器上传已经切到服务端授权链路,不再直接持有长期密钥。
  • 文件路径规划已包含环境和业务前缀,避免不同业务混桶混目录。
  • 日志和错误提示已统一到业务后端,不把底层异常直接返回给用户。

接入常见问题

为什么已经能上传文件,仍建议改成授权链接方案?

因为上传成功不等于接入安全。正式上线时,浏览器和 App 不应保存长期密钥,授权链接用于将权限边界收回到业务服务端。

接入时一定要先建测试桶吗?

建议一定先建。测试桶可以帮你把网络、权限、对象路径规划和 SDK 初始化问题提前暴露,避免一开始就污染正式数据。

文件路径应该按什么方式规划?

建议至少包含环境、业务线和日期,例如 prod/user-uploads/2026/06/。这样后续做归档、生命周期、审计和迁移都会轻松很多。

上一篇
文档中心
阅读路径、接入顺序与专题总览
下一篇
存储接入总览
能力边界、使用路径与整体说明
更多帮助

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

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

邮件支持

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

进入支持中心

客户常见问题

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

查看常见问题

价格与采购说明

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

查看价格说明