存储

复制对象

学习如何复制和移动对象


复制对象

您可以在不同存储桶之间或同一存储桶内复制对象。目前通过API只能复制最大5GB的对象。

当复制对象时,新对象的所有者将是发起复制操作的用户。

在同一存储桶内复制对象

要在同一存储桶内复制对象,使用copy方法。

1
2
3
4
5
import { createClient } from '@supabase/supabase-js'const supabase = createClient('your_project_url', 'your_supabase_api_key')// ---cut---await supabase.storage.from('avatars').copy('public/avatar1.png', 'private/avatar2.png')

跨存储桶复制对象

要跨存储桶复制对象,使用copy方法并指定目标存储桶。

1
2
3
4
5
6
7
import { createClient } from '@supabase/supabase-js'const supabase = createClient('your_project_url', 'your_supabase_api_key')// ---cut---await supabase.storage.from('avatars').copy('public/avatar1.png', 'private/avatar2.png', { destinationBucket: 'avatars2',})

移动对象

您可以在不同存储桶之间或同一存储桶内移动对象。目前通过API只能移动最大5GB的对象。

当移动对象时,新对象的所有者将是发起移动操作的用户。对象移动后,原始对象将不再存在。

在同一存储桶内移动对象

要在同一存储桶内移动对象,可以使用move方法。

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, error } = await supabase.storage .from('avatars') .move('public/avatar1.png', 'private/avatar2.png')

跨存储桶移动对象

要在不同存储桶之间移动对象,请使用 move 方法并指定目标存储桶。

1
2
3
4
5
6
7
import { createClient } from '@supabase/supabase-js'const supabase = createClient('your_project_url', 'your_supabase_api_key')// ---cut---await supabase.storage.from('avatars').move('public/avatar1.png', 'private/avatar2.png', { destinationBucket: 'avatars2',})

权限要求

用户要移动和复制对象,需要对源对象拥有 select 权限,对目标对象拥有 insert 权限。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
create policy "用户可以选择自己的对象(在任何存储桶中)"on storage.objectsfor selectto authenticatedusing ( owner_id = (select auth.uid()));create policy "用户可以在自己的文件夹中上传(在任何存储桶中)"on storage.objectsfor insertto authenticatedwith check ( (storage.folder(name))[1] = (select auth.uid()));