概述
MemFire Cloud存储使存储和服务大型文件变得简单。
文件
文件可以是任何种类的媒体文件。这包括图像、GIF和视频。由于文件的大小,最好将其存储在数据库之外。
文件夹
文件夹是一种组织文件的方式(就像在你自己的电脑上)。 没有正确或错误的方法来组织你的文件。你可以把它们存放在适合你的项目的任何文件夹结构中。
桶
Buckets是文件和文件夹的独特容器。你可以把它们看作是 "超级文件夹"。 一般来说,你会为不同的安全和访问规则创建不同的桶。例如,你可以把所有的公共文件放在一个 "公共 "桶里,而把需要登录访问的其他文件放在一个 "限制 "桶里。
开始使用
这是一个快速指南,展示了 MemFire Cloud 云存储的基本功能。
创建一个桶
你可以使用MemFire Cloud仪表板创建一个存储桶。 由于存储与你的MemFireDB数据库是互通的,你也可以使用SQL或我们的客户端库。这里我们创建一个叫做 "avatars "的桶。
1、进入我的应用-具体应用-云存储页面
2、点击“新建bucket”按钮
3、在弹框中输入bucket的名称
4、点击“确定”按钮,提交创建请求。
上传一个文件
你可以从仪表板上传文件,或在浏览器中使用我们的JS库上传文件。
1、进入我的应用-具体应用-云存储页面
2、选择你想上传文件的bucket,点击bucket名称进入页面
3、点击“上传文件”按
4、选择你期望上传的文件,等待文件上传完成。
const avatarFile = event.target.files[0]
const { data, error } = await supabase.storage
.from('avatars')
.upload('public/avatar1.png', avatarFile)
void main() async {
final client = SupabaseClient('supabaseUrl', 'supabaseKey');
// Create file `example.txt` and upload it in `public` bucket
final file = File('example.txt');
file.writeAsStringSync('File content');
final storageResponse = await client
.storage
.from('public')
.upload('example.txt', file);
}
下载一个文件
你可以从仪表板上下载文件,或在浏览器中使用我们的JS库下载文件。
1、进入我的应用-具体应用-云存储页面
2、选择你想下载文件所在的bucket,点击bucket名称进入页面
3、选择你想下载的文件
4、点击“下载”按钮。
添加安全规则
要限制对你的文件的访问,你可以使用仪表板或SQL。
1、进入我的应用-具体应用-云存储-权限设置页面
2、选择要设置权限的存储bucket
3、点击“权限设置”栏目,为文件、存储bucket创建策略
4、选择要将策略应用于下载(选择)、上载(插入)、更新(更新)还是删除(删除)
5、为您的策略指定一个唯一的名称
6、使用SQL编写安全策略。
助手
MemFire Cloud存储配置了数据库SQL帮助函数,您可以在数据库查询和策略中使用这些函数。
storage.filename()
返回文件名。
select storage.filename(name)
from storage.objects;
For example, if your file is stored in public/subfolder/avatar.png
it would return:
'avatar.png'
storage.foldername()
返回一个数组路径,其中包含文件所属的所有子文件夹。
select storage.foldername(name)
from storage.objects;
For example, if your file is stored in public/subfolder/avatar.png
it would return:
[ 'public', 'subfolder' ]
storage.extension()
返回一个文件的扩展名。
select storage.extension(name)
from storage.objects;
例如,如果你的文件存储在public/subfolder/avatar.png
,它将返回。
'png'
访问对象
对于私有桶,你可以通过下载方法访问对象。这对应于/object/auth/
API端点。另外,你可以使用调用/object/sign/
API的createSignedUrl方法,创建一个可公开分享的URL,并设定其到期日期。
对于公共桶,你可以直接访问资产,不需要令牌或授权标头。getPublicUrl 帮助方法返回资产的完整公共URL。这在内部调用/object/public/
API端点。
安全性
MemFire Cloud存储与你的MemFireDB数据库集成。 这意味着你可以使用相同的策略引擎来管理对你的文件的访问。
策略实例
这里有一些例子向你展示PostgreSQL的行级安全的力量。每个策略都附加到一个表,并且每次访问表时都会执行该策略。
允许公众访问一个存储桶
-- 1. Allow public access to any files in the "public" bucket
create policy "Public Access"
on storage.objects for select
using ( bucket_id = 'public' );
允许登录用户访问存储桶
-- 1. Allow logged-in access to any files in the "restricted" bucket
create policy "Restricted Access"
on storage.objects for select
using (
bucket_id = 'restricted'
and auth.role() = 'authenticated'
);
允许个人访问文件
-- 1. Allow a user to access their own files
create policy "Individual user Access"
on storage.objects for select
using ( auth.uid() = owner );