概述

MemFire Cloud存储使存储和服务大型文件变得简单。

文件

文件可以是任何种类的媒体文件。这包括图像、GIF和视频。由于文件的大小,最好将其存储在数据库之外。

文件夹

文件夹是一种组织文件的方式(就像在你自己的电脑上)。 没有正确或错误的方法来组织你的文件。你可以把它们存放在适合你的项目的任何文件夹结构中。

Buckets是文件和文件夹的独特容器。你可以把它们看作是 "超级文件夹"。 一般来说,你会为不同的安全和访问规则创建不同的桶。例如,你可以把所有的公共文件放在一个 "公共 "桶里,而把需要登录访问的其他文件放在一个 "限制 "桶里。

开始使用

这是一个快速指南,展示了 MemFire Cloud 云存储的基本功能。

创建一个桶

你可以使用MemFire Cloud仪表板创建一个存储桶。 由于存储与你的MemFireDB数据库是互通的,你也可以使用SQL或我们的客户端库。这里我们创建一个叫做 "avatars "的桶。

1、进入我的应用-具体应用-云存储页面
2、点击“新建bucket”按钮
3、在弹框中输入bucket的名称
4、点击“确定”按钮,提交创建请求。

avatar

上传一个文件

你可以从仪表板上传文件,或在浏览器中使用我们的JS库上传文件。

avatar

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、点击“下载”按钮。

avatar

添加安全规则

要限制对你的文件的访问,你可以使用仪表板或SQL。

1、进入我的应用-具体应用-云存储-权限设置页面
2、选择要设置权限的存储bucket
3、点击“权限设置”栏目,为文件、存储bucket创建策略
4、选择要将策略应用于下载(选择)、上载(插入)、更新(更新)还是删除(删除)
5、为您的策略指定一个唯一的名称
6、使用SQL编写安全策略。

avatar

助手

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 );

results matching ""

    No results matching ""