存储

从存储服务提供资源

从存储服务提供资源


公共存储桶

存储桶基础所述,上传到公共存储桶的所有文件均可公开访问,并享有较高的CDN缓存命中率。

您可以通过以下标准URL格式访问这些文件:

1
https://[project_id].supabase.co/storage/v1/object/public/[bucket]/[asset-name]

也可以使用Supabase SDK的getPublicUrl方法自动生成该URL:

1
2
3
4
5
6
7
import { createClient } from '@supabase/supabase-js'const supabase = createClient('your_project_url', 'your_supabase_api_key')// ---cut---const { data } = supabase.storage.from('bucket').getPublicUrl('filePath.jpg')console.log(data.publicUrl)

下载文件

若希望浏览器自动下载资源而非直接展示,可添加?download查询参数。

默认情况下会使用资源名称作为保存文件名。您也可以通过download参数指定自定义文件名,例如:?download=customname.jpg

私有存储桶

非公开存储桶中的资源被视为私有资源,无法像公共存储桶那样通过公开URL访问。

仅可通过以下方式访问:

  • 在服务端生成有时限的签名URL(例如使用边缘函数)
  • 通过GET请求访问URL https://[project_id].supabase.co/storage/v1/object/authenticated/[bucket]/[asset-name] 并携带用户授权头

URL签名

通过调用SDK的createSignedUrl方法,您可以生成有时限的签名URL供用户访问:

1
2
3
4
5
6
7
8
9
10
11
import { createClient } from '@supabase/supabase-js'const supabase = createClient('your_project_url', 'your_supabase_api_key')// ---cut---const { data, error } = await supabase.storage .from('bucket') .createSignedUrl('private-document.pdf', 3600)if (data) { console.log(data.signedUrl)}