如何使用curl上传到Supabase Storage?

9fkzdhlc  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(92)

我看到了将所有客户端库的文件上传到Supabase Storage的示例和手册,但没有关于普通HTTP协议(例如,使用curl)的完整信息。
《Supabase Storage API参考手册》和《Supabase Storage API Swagger UI文档》都详细描述了API,但遗漏了一个重要细节:要使用的基本URL。

7fhtutme

7fhtutme1#

您的需求:

1.您创建了一个存储桶。使用其名称代替下面的{bucket}
1.您为表storage.objects创建了一个RLS策略,该策略允许通过身份验证的用户使用INSERT。
1.您手头有项目的引用ID。当托管在www.example.com上时supabase.com,这是用于所有API请求的URL的子域部分。用它来代替下面的{ref}
1.您拥有项目的匿名角色API密钥。使用它代替下面的{anon-key}
1.您的用户具有当前有效的JWT令牌。用它来代替下面的{bearer-auth-token}
1.您有一个想要上传的文件,其绝对路径为/path/to/file.ext。使用该绝对路径代替下面的{path-and-filename.ext},并使用文件名和扩展名代替下面的{filename.ext}

现在,一个有效的上传命令看起来像这样:

curl \
  -X POST "https://**{ref}**.supabase.co/storage/v1/object/**{bucket}**/**{filename.ext}**" \
  --data-binary "@**{path-and-filename.ext}**" \
  -H "apikey: **{anon-key}**" \
  -H "Authorization: Bearer **{bearer-auth-token}**"

备注:

  • URL路径必须以storage/v1/为前缀。这是我必须测试/逆向工程的部分。manual仍然提到apiv0/,这是过时的,也错过了提到storage/前缀。Swagger UI docs既没有提到storage/也没有提到v1/,但两者都是必需的。
  • 在请求URL https://{ref}.supabase.co/storage/v1/object/{bucket}/{filename.ext}中,您实际上可以将{filename.ext}设置为您想要用于保存文件服务器端的任何文件名和扩展名。它不必与文件的本地文件名相同。您甚至可以包含任何您喜欢的路径。
  • 成功后,结果将是一个JSON对象{"Key": "{bucket}/{filename.ext}"},其中包含您在请求URL中使用的值。这是识别上传的文件服务器端的关键,当你想下载,移动它等。
  • 由于path和filename是文件的关键标识,因此尝试将具有相同路径和文件名的文件上传到同一个存储桶将导致错误{"statusCode": "409", "error": "Duplicate", "message": "The resource already exists"}

相关问题