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

Laravel配置Supabase作为文件系统遇上传错误求助

解决Laravel Supabase Flysystem文件上传失败问题

核心问题:密钥权限不匹配

配置注释里的"Use a privileged key; read-only does not work",意思是必须使用Supabase的服务端角色密钥(Service Role Key):

  • 普通项目匿名密钥(anon key)是给客户端用的,权限受限,无法绕过存储桶的RLS(行级安全)策略完成写入操作。
  • S3兼容密钥是针对S3协议工具设计的,和这个Laravel包的认证逻辑不匹配,不能用于此处。

你需要去Supabase控制台的「设置」→「API」页面,复制service_role类型的密钥——这个密钥拥有全项目权限,能完成存储桶的写入操作。

配置项逐一校验

检查你的filesystems.php配置是否符合要求:

  • key:确保填入的是Service Role Key,不要带多余空格或引号,直接复制粘贴即可。
  • bucket:填写存储桶的名称(不是ID),比如你创建的桶叫myapp-file-uploads就填这个,可在Supabase存储页面确认。
  • endpoint:格式必须是https://<你的项目ID>.supabase.co/storage/v1,直接从存储页面的「API URL」复制,不要添加额外路径。
  • public:如果设为true,要确保存储桶的公共访问权限已开启;若启用了RLS,还需添加允许写入的策略(比如允许服务端角色写入,或根据业务逻辑设置)。

快速排查步骤

  1. 查看详细错误日志:Laravel的storage/logs/laravel.log里会有更具体的异常信息(比如认证失败、桶不存在、权限被拒),能快速定位问题。
  2. 测试桶的可用性:用Service Role Key调用Supabase存储API GET /storage/v1/buckets,确认你的桶存在且能被访问。
  3. 简化上传测试:先尝试上传文件到存储桶根目录(去掉uploads/前缀),排除路径创建的问题。

正确的.env示例

SUPABASE_SECRET_ACCESS_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...(你的Service Role Key)
SUPABASE_STORAGE_BUCKET=myapp-file-uploads
SUPABASE_STORAGE_ENDPOINT=https://abc123.supabase.co/storage/v1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 09:00:17