跳到主要内容

云存储

云存储是云开发为用户提供的文件存储能力,用户可以通过云开发提供的 CLI 工具、SDK 对存储进行操作,如上传、下载文件。存储在云存储中的文件默认提供 CDN 加速访问,用户可以快速访问云存储中的文件。

路径说明

  • localPath 为本地文件或文件夹的路径,为 目录/文件名 的形式,如 ./index.jsstatic/css/index.css 等。
  • cloudPath 为云存储文件或文件夹的相对根目录的路径,为 目录/文件名 的形式,如 index.jsstatic/css/index.js 等。
⚠️ 注意事项

Windows 系统中 localPath 为本地路径形式,是系统可以识别的路径,通常使用 \ 分隔符。cloudPath 是云端文件路径,均需要使用 / 分隔符。

上传文件

您可以使用下面的命令上传文件/文件夹,当 CLI 检测到 localPath 为文件夹时,会自动上传文件内的所有文件。

tcb storage upload localPath cloudPath

# 指定上传重试次数(0-10,默认 1)
tcb storage upload localPath cloudPath --times 3

# 指定重试间隔(ms,默认 500)
tcb storage upload localPath cloudPath --interval 1000

下载文件

您可以使用下面的命令下载文件/文件夹,需要下载文件夹时,需要指定 --dir 参数。

# 下载文件
tcb storage download cloudPath localPath

# 下载文件夹
tcb storage download cloudPath localPath --dir

下载全部文件

当指定 cloudPath 为 / 时,即代表下载云存储中的全部文件:

tcb storage download / localPath --dir

删除文件

版本提示

tcb storage rm 命令自 v3.0.0 起新增,是推荐的删除命令,功能更强大。

命令变更

旧命令 tcb storage delete 已废弃,保留向后兼容,请使用新命令 tcb storage rm

# 删除单个文件
tcb storage rm cloudPath

# 删除文件夹(递归删除)
tcb storage rm cloudPath --dir

# 强制删除,不提示确认
tcb storage rm cloudPath --force

# 模拟运行,只显示将要删除的文件,不实际执行
tcb storage rm cloudPath --dry-run

命令参数

参数说明
--dir删除目标是文件夹(递归删除)
--recursive--dir
--force强制删除,不提示确认
--dry-run模拟运行,只显示将要删除的文件,不实际删除

列出文件列表

列出文件夹下的文件:

tcb storage list [cloudPath]

复制/移动文件

版本提示

自 v3.0.0 起新增此功能。

在云端复制或移动文件(仅支持文件级别,不支持文件夹):

# 复制文件
tcb storage cp <sourcePath> <destPath>

# 移动文件(复制后删除源文件)
tcb storage cp <sourcePath> <destPath> --move

# 强制覆盖已存在的目标文件
tcb storage cp <sourcePath> <destPath> --force

# 跳过已存在的目标文件
tcb storage cp <sourcePath> <destPath> --skip

命令参数

参数说明
--move移动文件(复制后删除源文件)
--force强制覆盖已存在的文件
--skip跳过已存在的文件
-e, --env-id <envId>环境 ID

搜索文件

版本提示

自 v3.0.0 起新增此功能。

按文件名模式搜索云端文件:

# 基本搜索(支持通配符,如 *.jpg)
tcb storage search <pattern>

# 在指定目录下搜索
tcb storage search <pattern> --dir images/

# 按文件类型过滤(如 jpg、png、pdf)
tcb storage search <pattern> --type jpg

# 将 pattern 作为正则表达式处理
tcb storage search <pattern> --regex

命令参数

参数说明
-e, --env-id <envId>环境 ID
--dir <dir>指定搜索目录(不指定则搜索根目录)
--type <ext>按文件类型过滤(如 jpgpngpdf
--regex将 pattern 作为正则表达式处理

获取文件访问链接

获取文件的临时访问链接:

tcb storage url cloudPath

# 指定链接有效期(秒,默认 3600)
tcb storage url cloudPath --expire 7200

获取文件信息

获取文件的简单信息:

tcb storage detail cloudPath

权限管理

已废弃(v3.0.0+)

tcb storage get-acltcb storage set-acltcb storage rules gettcb storage rules update 等存储权限命令自 v3.0.0 起已废弃。

请迁移到 tcb permission 命令进行资源权限管理,详见 权限管理

获取访问权限

tcb storage get-acl

设置访问权限

tcb storage set-acl --acl <权限值>

可选权限值READONLYPRIVATEADMINWRITEADMINONLY

获取权限规则

tcb storage rules get

更新权限规则

# 使用预设权限
tcb storage rules update --acl READONLY

# 使用自定义规则(JSON 格式)
tcb storage rules update --acl CUSTOM --rules '[{"role":"anyone","action":"read"}]'

可选权限值READONLYPRIVATEADMINWRITEADMINONLYCUSTOM(自定义规则时使用)


废弃命令说明

以下旧格式命令(冒号分隔)已废弃,保留向后兼容,请迁移到新命令:

旧命令新命令
tcb storage:uploadtcb storage upload
tcb storage:downloadtcb storage download
tcb storage:deletetcb storage rm
tcb storage:listtcb storage list
tcb storage:urltcb storage url
tcb storage:detailtcb storage detail
tcb storage:get-acltcb permission
tcb storage:set-acltcb permission

命令速查

命令说明
tcb storage upload <local> <cloud>上传文件/文件夹
tcb storage download <cloud> <local>下载文件/文件夹
tcb storage rm <path>删除文件/文件夹(推荐)
tcb storage list [path]列出文件列表
tcb storage cp <src> <dest>复制/移动文件
tcb storage search <pattern>搜索文件
tcb storage url <path>获取临时访问链接
tcb storage detail <path>获取文件信息
tcb storage get-acl获取访问权限(已废弃,使用 tcb permission
tcb storage set-acl设置访问权限(已废弃,使用 tcb permission
tcb storage rules get获取权限规则(已废弃,使用 tcb permission
tcb storage rules update更新权限规则(已废弃,使用 tcb permission

PostgreSQL 环境

版本提示

以下命令面向 PostgreSQL 架构 的云开发环境,自 @cloudbase/cli@3.4.0 起提供。

  • 这些命令对应 SDK 的 PG Storage HTTP API(参见 cloudbase-manager-node PG 接口)。
  • 在 PG 环境下,本页前面的传统 tcb storage 平铺命令(upload / download / delete / rm / list / url / detail / cp / search 等)会被拒绝执行,CLI 会在提示中给出对应的 PG 子命令替代项。
  • 创建 PG 环境可使用:tcb env create --alias <name> --package <pkg> --postgresql --yes
  • 查询某个环境是否为 PG 环境,可运行 tcb env list 查看类型。

命令分组速览

命令组功能
tcb storage buckets管理 Storage bucket(PG 元信息)
tcb storage policies查看 storage schema 下的 RLS 策略
tcb storage objects对象 CRUD、签名、复制、移动等

PG 环境下,tcb db execute 也支持执行 PostgreSQL SQL,包括 bucket / 策略管理 SQL(详见 关系型数据库(MySQL) 中的 PostgreSQL 扩展说明)。


tcb storage buckets list

列出当前 PG 环境下所有 Storage bucket。

tcb storage buckets list [-e <envId>] [--json]
  • --json:输出原始 PGExecuteResult(含 Columns / Rows)。
  • 表格输出列:Id / Name / Public / Size Limit / MIME Types / Created / Updated

Bucket 操作通过 tcb db execute 执行 SQL 完成,例如:

# 创建 bucket
tcb db execute -e <envId> --sql "INSERT INTO storage.buckets (id, name, public, created_at, updated_at) VALUES ('avatars', 'avatars', false, now(), now())"

tcb storage policies list

列出 storage schema 下 buckets / objects 表上的 RLS 策略。

tcb storage policies list [--table buckets|objects] [-e <envId>] [--json]
参数说明
--table <table>按表过滤,可选 buckets / objects;不传则同时返回两表的策略
--json输出原始 PGExecuteResult

RLS 策略变更通过 tcb db execute --role postgres 执行 CREATE POLICY / DROP POLICY


tcb storage objects upload

上传本地文件到 Storage bucket。

tcb storage objects upload <localPath> <key> -b <bucketId> [options]
参数说明
<localPath>本地文件绝对/相对路径,必须是文件
<key>远端对象名(不能以 / 开头)
-b, --bucket <bucketId>Bucket ID,可用环境变量 TCB_BUCKET_ID 替代
--content-type <mime>显式 MIME,不传则按 扩展名 → magic bytes 推断
--cache-control <value>整数自动转 max-age=<n>,字符串原样作为 Cache-Control
--metadata <json>自定义 metadata JSON,内部 Base64 编码到 X-Metadata
--robots-tag <value>X-Robots-Tag
--upsertPOST 模式下允许覆盖已存在对象
--use-put使用 PUT 方法(始终覆盖)
--json输出 SDK 原始返回({ Id, Key }

示例:

tcb storage objects upload ./hello.txt test/hello.txt -b my-bucket
tcb storage objects upload ./hello.txt test/hello.txt -b my-bucket --content-type text/plain --upsert

tcb storage objects download

从 Storage bucket 下载对象到本地。

tcb storage objects download <key> [localPath] -b <bucketId> [options]
参数说明
<key>对象名
[localPath]本地路径;省略时输出到 stdout;指向已存在目录会自动拼上 key 的 basename
-b, --bucket <bucketId>Bucket ID
-m, --method <method>GET(默认)/ HEAD
--download <filename>触发浏览器下载(?download=<filename>
--if-none-match <etag>If-None-Match 头(仅认证下载路径生效)
--if-modified-since <date>If-Modified-Since
--range <range>Range 头(断点续传)
--overwritelocalPath 已存在时允许覆盖
--json仅返回元信息({ status, headers }),不落盘

行为说明:

  • 已登录 → 走认证下载路径(downloadAuthenticatedObject),可访问 private/public bucket;
  • 未登录 → 回退到 downloadPublicObject,仅能访问 public bucket;
  • --method HEAD--json 模式下不会写本地文件。

tcb storage objects stat

查询对象元信息。

tcb storage objects stat <key> -b <bucketId> [options]
参数说明
-m, --method <method>GET(默认)/ HEAD,HEAD 仅认证路径支持
--json输出 { status, headers, body }bodyIObjectInfoHttpPayload

表格输出按以下字段顺序展示:id / name / bucket_id / version / size / content_type / cache_control / etag / last_modified / created_at / metadata


tcb storage objects list

列出 bucket 中的对象,支持前缀过滤、分页与排序。

tcb storage objects list -b <bucketId> [options]
参数说明
--prefix <prefix>路径前缀过滤
--limit <n>分页大小,1~1000,默认 20,超出范围会以 INVALID_PARAM(exit 3)拒绝
--cursor <cursor>翻页游标(上一次响应的 nextCursor
--with-delimiter使用 / 分隔文件夹
--sort-by <column>排序列,可选 name / created_at / updated_at
--sort-order <order>排序方向,可选 asc(默认)/ desc
--json输出 SDK 原始返回(含 folders / objects / hasNext / nextCursor

list 接口需要登录态,未登录时会以 AUTH_FAILED 失败。


tcb storage objects rm

删除对象,单次最多 20 个。

tcb storage objects rm <keys...> -b <bucketId> [-y] [--json]
参数说明
<keys...>1~20 个对象名;超过 20 个会以 INVALID_PARAM(exit 3)拒绝
-y, --yes跳过删除前的确认提示
--json单 key 走 deleteObject,输出 { message };多 key 走 deleteObjects,输出 IDeletedObjectInfo[]

表格输出列:Key / StatusStatusDELETED / NOT_FOUND(批量删除中不存在的对象会被服务端静默跳过)。


tcb storage objects cp

复制对象到新位置。

tcb storage objects cp <srcKey> <dstKey> -b <bucketId> [options]
参数说明
-b, --bucket <bucketId>源 Bucket ID
--dst-bucket <bucketId>目标 Bucket ID,默认与源 Bucket 相同
--copy-metadata <bool>是否复制源对象 metadata,默认 truefalse--metadata / --user-metadata 才生效
--metadata <json>系统 metadata JSON,与源 metadata 合并;COS 仅识别 cacheControl / mimetype / contentType
--user-metadata <json>用户自定义 metadata JSON,整体替换 目标 user_metadata
--upsert允许覆盖目标位置已有对象
--json输出 SDK 原始返回(ICopyObjectHttpResult

校验细节:

  • 同 bucket 下源 key 与目标 key 相同且未传 --upsertINVALID_PARAM
  • --metadata / --user-metadata 仅在 --copy-metadata false 时生效,其他情况下传入会被 CLI 直接拒绝。

tcb storage objects mv

移动(rename)对象到新位置;服务端一次性完成「复制 + 删除源对象」。

tcb storage objects mv <srcKey> <dstKey> -b <bucketId> [--dst-bucket <bucketId>] [--json]

同 bucket 下源 key 与目标 key 完全相同会被本地拦截为 INVALID_PARAM


tcb storage objects sign

为对象生成签名 URL,默认下载签名,加 --upload 切换为上传签名。

# 下载签名
tcb storage objects sign <keys...> -b <bucketId> [--expires-in <seconds>] [--json]

# 上传签名
tcb storage objects sign <key> --upload -b <bucketId> [--upsert] [--json]
参数说明
<keys...>下载模式 1~500 个;上传模式仅允许 1 个
--upload切换到上传签名模式
--expires-in <seconds>过期时间(秒),>= 1,默认 600;仅下载模式
--upsert允许覆盖(x-upsert: true),仅上传模式
--json下载模式输出 [{ path, signedURL, error }];上传模式输出 { url, token }

互斥校验:

  • --upload--expires-in 互斥;
  • 下载模式下传 --upsert 会被拒绝;
  • --upload 一次只能签 1 个 key。

退出码

退出码含义
3 INVALID_INPUT包含 INVALID_PARAM / MISSING_PARAM / FLAT_CMD_NOT_AVAILABLE_IN_PG / ENV_NOT_PG

详见 exit-codes