Bucket 管理
Bucket 是 PG 模式云存储中组织文件的基础容器。每个 Bucket 对应 storage.buckets 表中的一行,文件对象的元数据则写入 storage.objects,并通过 bucket_id 关联到所属 Bucket。
如果你熟悉 Supabase Storage,可以 把这里理解为面向通用文件的 File Bucket:用于存储图片、视频、文档、压缩包、用户上传内容和静态资源。
什么时候拆分 Bucket
建议按访问模型、上传限制和业务生命周期拆分 Bucket,而不是简单按目录拆分。
| 场景 | 推荐 Bucket | 典型路径 | 推荐权限模型 |
|---|---|---|---|
| 用户头像 | avatars | <uid>/avatar.png | 本人写,按业务决定是否公开读 |
| 公开静态资源 | public-assets | logos/cloudbase.png | 公开读,服务端写 |
| 用户私有文件 | private-files | <uid>/<filename> | 仅本人读写 |
| 团队协作文件 | team-files | <team_id>/<filename> | JOIN 业务表判断团队成员 |
| 文章 / 订单附件 | article-assets | articles/<article_id>/<filename> | 跟随业务对象权限 |
如果两类文件的访问权限、大小限制、MIME 类型限制或清理策略不同,通常应拆成不同 Bucket。
创建 Bucket
你可以通过 JS SDK、HTTP API、SQL 或管理端 SDK 创建 Bucket。下面以 JS SDK 和 SQL 为例。
JS SDK
import cloudbase from '@cloudbase/js-sdk';
const app = cloudbase.init({ env: '<env-id>' });
const { data, error } = await app.storage.createBucket('avatars', {
public: false,
fileSizeLimit: 5 * 1024 * 1024,
allowedMimeTypes: ['image/png', 'image/jpeg', 'image/webp'],
});
if (error) {
throw error;
}
console.log(data.id);
SQL
INSERT INTO storage.buckets (id, name, public, file_size_limit, allowed_mime_types)
VALUES (
'avatars',
'avatars',
false,
5 * 1024 * 1024,
ARRAY['image/png', 'image/jpeg', 'image/webp']
);
更多方式见 快速体验:创建 Bucket 和 创建 Bucket HTTP API。