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,还需添加允许写入的策略(比如允许服务端角色写入,或根据业务逻辑设置)。
快速排查步骤
- 查看详细错误日志:Laravel的
storage/logs/laravel.log里会有更具体的异常信息(比如认证失败、桶不存在、权限被拒),能快速定位问题。 - 测试桶的可用性:用Service Role Key调用Supabase存储API
GET /storage/v1/buckets,确认你的桶存在且能被访问。 - 简化上传测试:先尝试上传文件到存储桶根目录(去掉
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
相关产品推荐
相关产品推荐

