Supabase Storage 上传权限详细配置
Supabase 中配置 Storage 存储桶的上传与读取权限,包括桶的创建、字段检查、SQL Policy 编写,以及前端上传后的访问 URL 获取方式
1. 登录 Supabase Dashboard
进入你的 Supabase 项目控制台:https://app.supabase.com
2. 创建存储桶(Bucket)
- 在左侧菜单点击 Storage → Buckets
- 点击 New Bucket 新建一个桶
- 命名为
article-images
- 注意:
- 不能使用保留名
public - 名称不要包含空格或特殊符号
- 不能使用保留名
- 创建完成后,进入该桶进行后续配置
3. 检查 storage.objects 表字段
- 打开顶部导航栏的 SQL Editor
- 新建查询,输入以下 SQL:
SELECT column_name
FROM information_schema.columns
WHERE table_name = 'objects' AND table_schema = 'storage';
- 点击运行,查看返回的字段列表
- 重点关注是否存在字段名为
bucket_id或bucket,以及其他字段
4. 编写 Storage Policies(策略)
4.1 添加上传策略(INSERT)
- 返回左侧 Storage 页面
- 选择 Policies
- 找到 Policies under storage.objects
- 点击 New Policy 创建新策略
填写内容:
-
Name: allow upload
-
Action: INSERT
-
Target roles: 选择 authenticated(登录用户)
-
WITH CHECK: 根据字段名填写表达式:
-
如果存在字段
bucket_id:auth.role() = 'authenticated' AND bucket_id = 'article-images' -
如果没有
bucket_id字段,改用bucket:auth.role() = 'authenticated' AND bucket = 'article-images' -
如果不确定字段名,可以先写宽松的策略:
auth.role() = 'authenticated'
-
- 点击 Save 保存策略
4.2 添加读取策略(SELECT)
- 仍在 Policies 页面,点击 New Policy
- 填写内容:
-
Name: allow read
-
Action: SELECT
-
Target roles: 选择 all roles(所有用户,包括匿名和认证用户)
-
USING: 根据字段名填写表达式:
-
如果存在字段
bucket_id:bucket_id = 'article-images' -
如果没有
bucket_id字段,改用bucket:bucket = 'article-images'
-
- 点击 Save 保存策略
5. 测试上传权限
在你的前端代码中调用 Supabase Storage 上传文件,确认不再出现权限错误。
6. 代码示例 — 获取图片公开链接
上传成功后,使用下面代码获取图片的公开访问 URL: