如何使用curl上传文件到Supabase存储?

3
1个回答

4

所需条件:

  1. 您已创建了一个存储桶。请在下面使用其名称替换{bucket}
  2. 您已为表格storage.objects创建了一个RLS策略,允许经过身份验证的用户进行插入操作。
  3. 您手头有项目的引用ID。当在supabase.com上托管时,这是用于所有API请求的URL中的子域部分。请在下面使用它来代替{ref}
  4. 您拥有项目的匿名角色API密钥。请在下面使用它来代替{anon-key}
  5. 您拥有当前有效的JWT令牌以供用户使用。请在下面使用它来代替{bearer-auth-token}
  6. 您有一个要上传的文件,其绝对路径类似于/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/为前缀。这是我需要测试/反向工程的部分。手册仍然提到apiv0/,这已经过时了,并且还漏掉了storage/前缀。Swagger UI文档既没有提到storage/也没有提到v1/,但两者都是必需的。

  • 在请求URL https://{ref}.supabase.co/storage/v1/object/{bucket}/{filename.ext}中,您实际上可以将{filename.ext}设置为任何带有扩展名的文件名,以便将文件保存在服务器端。它不必与文件的本地文件名相同。您甚至可以包括任何您喜欢的路径。

  • 成功后,结果将是一个JSON对象{"Key": "{bucket}/{filename.ext}"},其中包含您在请求URL中使用的值。这是标识上传文件在服务器端的关键,当您想要下载、移动等操作时需要用到它。

  • 由于路径和文件名用作标识文件的关键,因此尝试将具有相同路径和文件名的文件上传到同一存储桶中将导致错误{"statusCode": "409", "error": "Duplicate", "message": "The resource already exists"}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接