返回首页

Supabase Storage 上传权限详细配置

2025年7月28日·运维
Supabase 中配置 Storage 存储桶的上传与读取权限,包括桶的创建、字段检查、SQL Policy 编写,以及前端上传后的访问 URL 获取方式

1. 登录 Supabase Dashboard

进入你的 Supabase 项目控制台:https://app.supabase.com

2. 创建存储桶(Bucket)

  1. 在左侧菜单点击 Storage → Buckets
  2. 点击 New Bucket 新建一个桶
  3. 命名为 article-images
  • 注意:
    • 不能使用保留名 public
    • 名称不要包含空格或特殊符号
  1. 创建完成后,进入该桶进行后续配置

3. 检查 storage.objects 表字段

  1. 打开顶部导航栏的 SQL Editor
  2. 新建查询,输入以下 SQL:
SELECT column_name
FROM information_schema.columns
WHERE table_name = 'objects' AND table_schema = 'storage';
  1. 点击运行,查看返回的字段列表
  2. 重点关注是否存在字段名为 bucket_idbucket,以及其他字段

4. 编写 Storage Policies(策略)

4.1 添加上传策略(INSERT)

  1. 返回左侧 Storage 页面
  2. 选择 Policies
  3. 找到 Policies under storage.objects
  4. 点击 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'
      
  1. 点击 Save 保存策略

4.2 添加读取策略(SELECT)

  1. 仍在 Policies 页面,点击 New Policy
  2. 填写内容:
  • Name: allow read

  • Action: SELECT

  • Target roles: 选择 all roles(所有用户,包括匿名和认证用户)

  • USING: 根据字段名填写表达式:

    • 如果存在字段 bucket_id

      bucket_id = 'article-images'
      
    • 如果没有 bucket_id 字段,改用 bucket

      bucket = 'article-images'
      
  1. 点击 Save 保存策略

5. 测试上传权限

在你的前端代码中调用 Supabase Storage 上传文件,确认不再出现权限错误。

6. 代码示例 — 获取图片公开链接

上传成功后,使用下面代码获取图片的公开访问 URL:

#supabase# storage# 上传权限# 存储策略# SQL Policy# bucket# 文件上传# 前端开发# 后端安全