大数跨境
0
0

Day 58 Supabase Table和Storage的分工之道

Day 58 Supabase Table和Storage的分工之道 AI出海札记
2025-11-25
5

前几天Supabase数据库因为存储了大量图片Base64字符串,导致空间不够了,但其实这个字段并没有什么用,所以我直接把字段删除算是暂时解决了问题,但是今天另一个站又遇到了一个新问题,它必须要存一些图片,如果还是像之前一样直接把Base64存起来的话,又会很容易导致容量不够,这时候我们就要用到Supabase的Storage了。

先来看下Table和Storage的区别:

Table一般是存储纯文字信息。比如用户账号(邮箱、名字)、商品信息(价格、库存)、订单记录等。而我们用SQL语句(增删改查)直接操作,比如用户表里存了用户ID和头像文件名,比如user_123_avatar.jpg,但图片本身不在这儿——表格只记名字,像图书目录。

而桶(Buckets)是Storage功能的一部分,像个云盘/U盘,适合放大文件,比如存储图片、视频、PDF等。比如用户上传头像时,我们把图片扔进叫avatars的桶里,拿到访问链接后,把链接地址存回表格的avatar_url字段。它们是怎么配合的呢?

用户上传头像图片 → 调用Storage API传到avatars桶

上传成功拿到公开URL → 更新users表里对应用户的avatar_url字段

页面上显示头像时 → 先查表格拿到URL,再用<img src="那个URL">显示

Storage还有两个核心功能:

  1. 分类管理,井井有条,你可以创建不同的分区,比如

  • 'user-avatars'    // 专门放用户头像

  • 'product-images'  // 专门放商品大图

  • 'invoices'        // 专门放生成的账单PDF

  • 'blog-assets'     // 专门放博客文章的配图

  1. 权限控制,安全放心

这是它的杀手级功能。可以精细控制谁能看、谁能改:

公开读:比如用户头像、商品图,谁都能看。

-- 让所有人能读 'avatars' 桶

create policy "任何人都可以查看头像"

on storage.objects for select

using ( bucket_id = 'avatars' );

私有读写:比如用户的私人文件,只有他自己能访问。

-- 只让用户操作自己的文件

create policy "用户只能操作自己的文件"

on storage.objects for all

using ( auth.uid() = owner );

所以文字信息、关系数据放在Table里,图片视频这些大文件放Storage里,这两个配合起来用基本就可以了。


【声明】内容源于网络
0
0
AI出海札记
🌊 记录 AI 出海的点滴,就像写给自己的备忘录。 🚀 在路上,一边走一边学,一边写。 ✍️ 不是教程,也不是新闻,只是一些真实的个人记录。
内容 70
粉丝 0
AI出海札记 🌊 记录 AI 出海的点滴,就像写给自己的备忘录。 🚀 在路上,一边走一边学,一边写。 ✍️ 不是教程,也不是新闻,只是一些真实的个人记录。
总阅读195
粉丝0
内容70