You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI集成Supabase Storage:无法列出公开存储桶问题

解决Supabase Storage无法列出公开存储桶的问题
  • 检查存储桶权限配置
    公开存储桶默认仅允许读取对象,列出存储桶权限需单独开启。登录Supabase控制台进入Storage页面,逐个检查目标桶的设置,确认「允许列出存储桶」(List buckets)权限已启用。

  • 修正API密钥与存储URL

    1. 代码中"apikey": "anon"需替换为项目实际的匿名公钥(在Supabase控制台→项目设置→API→anon public key获取)。
    2. SupabaseStorageClient的URL必须添加/storage/v1后缀,这是客户端调用存储API的标准路径。
    3. 匿名访问时,Authorization头应使用Bearer 匿名公钥,而非服务端专用的JWT Secret。

    修正后的初始化代码:

    let storage = SupabaseStorageClient(url: "https://xxx.supabase.co/storage/v1", headers: [
        "apikey": "你的匿名公钥",
        "Authorization": "Bearer 你的匿名公钥"
    ])
    
    let client = SupabaseClient(supabaseURL: URL(string: "https://xxx.supabase.co")!, supabaseKey: "你的匿名公钥")
    
  • CURL测试命令修正
    用CURL排查时,确保请求路径和头信息正确:

    curl "https://xxx.supabase.co/storage/v1/buckets" \
      -H "apikey: 你的匿名公钥" \
      -H "Authorization: Bearer 你的匿名公钥"
    

    根据返回的错误码定位问题:403代表权限未开启,404代表URL路径错误。

  • 异步函数执行上下文验证
    在SwiftUI中调用uploadProfilePhoto这类异步函数时,需确保在正确的异步上下文执行,比如使用.task修饰符:

    .task {
        if let user = currentUser, let photoData = photoData {
            do {
                try await uploadProfilePhoto(for: user, photoData: photoData)
            } catch {
                print(error.localizedDescription)
            }
        }
    }
    

内容的提问来源于stack exchange,提问作者JasonDevelops

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 01:57:52