使用 Supabase 的 Realtime + Storage 非常方便呢

文章目录

  • (一)Supabase
  • (二)Realtime(消息)
    • (2.1)Python 消息订阅
    • (2.2)JavaScript 消息订阅
  • (三)Storage(存储)
    • (3.1)Python 存储操作
    • (3.2)JavaScript 存储操作

(一)Supabase

在《用 Next.js 和 Supabase 进行“全栈”开发的入门》中,我搭(抄)建(袭)了一个类似论坛雏形的东西。
后端用了Supabase,但例子中仅限于数据库CRUD(增删改查)的操作。
如果用Supabase只是Postgres用数据库,那么就称不上BaaS了吧😄
因为万恶的简称会重复,网上搜BaaS会出来:羊叫声区块链即服务蔚来汽车租电模式绑定为服务……所以……

概念:

  • 💡BaaS = Backend as a Service,就是一种云服务,旨在为移动和 Web 应用提供后端云服务,包括云端数据/文件存储、账户管理、消息推送等等……

打开Supabase的仪表板,除了已经用到的数据库和认证以外,还有3个主要内容:

  • Realtime
  • Storage
  • Edge Functions

(二)Realtime(消息)

简单说Supabase的Realtime就是实时的消息推送。
当我们把一张表的Realtime选项开启后,这张表数据的增删改操作,都会产生消息,并且推送到每个订阅了这个频道消息的客户端上。

⚠️ 注意: Realtime是基于WebSocket。不能保证每条消息都送到,所以你的应用如果有严格的要求,就不能完全依靠Realtime的推送,比如也使用长轮询Long Polling

图)表开启Realtime:
在这里插入图片描述

图)设置RealTime涉及的操作。
在这里插入图片描述

调试时我们可以在Supabase仪表板中作为客户端,订阅一个Realtime的频道。
实际使用时,我们需要用到Supabase社区项目来连接和使用消息订阅,如下。

(2.1)Python 消息订阅

见:🔗Supabase社区项目

from realtime.connection import SocketSUPABASE_ID = "你的ID"
API_KEY = "你的匿名Key或系统Key"def callback1(payload):print("Callback 1: ", payload)if __name__ == "__main__":URL = f"wss://{SUPABASE_ID}.supabase.co/realtime/v1/websocket?apikey={API_KEY}&vsn=1.0.0"s = Socket(URL)s.connect()channel_1 = s.set_channel("realtime:*")channel_1.join().on("UPDATE", callback1)s.listen()

(2.2)JavaScript 消息订阅

见:🔗Supabase社区项目

import { RealtimeClient } from '@supabase/realtime-js'const client = new RealtimeClient(REALTIME_URL, {params: {apikey: API_KEY},
})const channel = client.channel('test-channel', {})channel.subscribe((status, err) => {if (status === 'SUBSCRIBED') {console.log('Connected!')}if (status === 'CHANNEL_ERROR') {console.log(`There was an error subscribing to channel: ${err.message}`)}if (status === 'TIMED_OUT') {console.log('Realtime server did not respond in time.')}if (status === 'CLOSED') {console.log('Realtime channel was unexpectedly closed.')}
})

(三)Storage(存储)

简单说Supabase提供的文件存储是桶buckets,可以当成一个盘符,一个挂载的设备。
在一个bucket里面,可以创建目录和文件。

⚠️ 注意:公开的桶 public bucket ,仅表示它有一个可用于下载文件的公有 URL。
所有其他关于存储桶或文件的操作,都要求您满足该存储桶上的存储策略(权限)。
另请注意,您应该对所有其他操作使用正常路径,而不是包含“public”的公共 URL 路径。

怪不得找不到桶……

(3.1)Python 存储操作

见:🔗Supabase社区项目

初始化客户端

import os
from supabase import create_client, Clienturl: str = os.environ.get("SUPABASE_URL")
key: str = os.environ.get("SUPABASE_KEY")
supabase: Client = create_client(url, key)

下载文件

bucket_name: str = "photos"
data = supabase.storage.from_(bucket_name).download("photo1.png")

上传文件

bucket_name: str = "photos"
new_file = getUserFile()
data = supabase.storage.from_(bucket_name).upload("/user1/profile.png", new_file)

删除文件

bucket_name: str = "photos"
data = supabase.storage.from_(bucket_name).remove(["old_photo.png", "image5.jpg"])

列举全部文件

bucket_name: str = "charts"
data = supabase.storage.from_(bucket_name).list()

移动/重命名文件

bucket_name: str = "charts"
old_file_path: str = "generic/graph1.png"
new_file_path: str = "important/revenue.png"
data = supabase.storage.from_(bucket_name).move(old_file_path, new_file_path)

(3.2)JavaScript 存储操作

见:🔗Supabase项目

下载文件

const { data, error } = await supabase.storage.from('avatars').download('folder/avatar1.png')

上传文件

const avatarFile = event.target.files[0]
const { data, error } = await supabase.storage.from('avatars').upload('public/avatar1.png', avatarFile, {cacheControl: '3600',upsert: false})

删除文件

const { data, error } = await supabase.storage.from('avatars').remove(['folder/avatar1.png'])

列举全部文件

const { data, error } = await supabase.storage.from('avatars').list('folder', {limit: 100,offset: 0,sortBy: { column: 'name', order: 'asc' },})

获得文件公开URL

const { data } = supabase.storage.from('public-bucket').getPublicUrl('folder/avatar1.png')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/14404.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux:Ubuntu修改root密码

Linux:Ubuntu修改root密码 修改默认grub配置文件 rootshanxin:~# vim /etc/default/grub# 主要修改内容如下:GRUB_DEFAULT0 #GRUB_TIMEOUT_STYLEhidden 注释这一行 GRUB_TIMEOUT5 # 将这一行的时间改为5秒进行开启启动的grub文件的复写 rootshanxin:~…

芯课堂 | UI Creator 物理键盘移植指南

LVGL提供输入设备的种类一共有5种,分别是:touchpad(触摸板)、mouse(鼠标)、keypad(键盘)、encoder(编码器)、button(外部按键)。而基于…

如何成为一个专业的AI产品经理?

可以找专业的老师带。 可以找专业的内容学。 可以多遇挫折并快速学习,屡败屡战,笔者本人从业AI十年有余,吃了不少苦,有过很多或成功或失败的经历。 成为一个专业的AI产品经理需要一系列专业知识和技能的积累,以及在…

基于Matlab卷积神经网络(CNN)人脸识别系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 人脸识别技术作为计算机视觉领域的一个重要分支,已经广泛应用于安全监控、身份验证…

FreeRTOS学习——FreeRTOS队列(下)之队列创建

本篇文章记录我学习FreeRTOS队列创建的知识。主要分享队列创建需要使用的初始化函数、队列复位函数。 需要进一步了解FreeRTOS队列的相关知识,读者可以参考以下文章: FreeRTOS学习——FreeRTOS队列(上)_freertos 单元素队列-CSDN博…

【hackmyvm】Slowman靶机

文章目录 主机探测端口探测FTP匿名登录 目录探测hydra爆破mysql爆破zip------fcrackzip爆破密码-----john提权 主机探测 ┌──(root㉿kali)-[/home/kali] └─# fping -ag 192.168.9.1/24 2>/dev/null 192.168.9.221 主机192.168.9.224 靶机端口探测 ┌──(roo…

【教程】Linux 安装 kkFileView 文档在线预览项目 及优化

【教程】Linux 安装 kkFileView 文档在线预览项目 官网 kkFileView - 在线文件预览 (keking.cn) 安装包 可以直接下载成品 也可以下载source 源码 自己编译 kkFileView 发行版 - Gitee.com 打开IDEA 然后先clear 再install 然后在 file-online-preview\server\target 目录…

WordPress插件Disable WP REST API,可根据是否登录来禁用REST API

前面跟大家分享了代码版禁用WordPress REST API的方法(详见『WordPress4.7以上版本如何禁用JSON REST API?』),不过有些站长不太敢折腾自己的网站代码,那么建议试试这款Disable WP REST API,它可以&#xf…

小结5:朗读练习第二段

五、朗读练习2 2024-5-6始,5-14终,5-15写。 我渐渐体会到一些朗读的乐趣。但我还要考研,要写作业、期末考试。如果是在大一该多好。我可以就这样一天一天的写下去,慢慢地有一些自己的作品,还能录视频发到b站上。 上一篇…

通过修改物理内存实现跨进程内存读写

习一下利用修改物理内存来跨进程内存读写 系统:win10 21h1 x64 编译环境: vs2022 详情见附录 基础 虚拟地址转物理地址 虚拟地址也称线性地址,一个线性地址进程的DirBase地址可以转换成物理地址。先来看线性地址的含义 在x64体系中只实现了48位的virtu…

刷题之从前序遍历与中序遍历序列构造二叉树(leetcode)

从前序遍历与中序遍历序列构造二叉树 前序遍历&#xff1a;中左右 中序遍历&#xff1a;左中右 前序遍历的第一个数必定为根节点&#xff0c;再到中序遍历中找到该数&#xff0c;数的左边是左子树&#xff0c;右边是右子树&#xff0c;进行递归即可。 #include<vector>…

Juniper查看并调整策略顺序

1.查看安全策略 >show security policies 顺序就是按照显示出来的顺序&#xff0c;与Index无关&#xff0c;从上到下匹配 2. 调整防火墙策略 #insert security policies from-zone CAMERAS to-zone INTERNET policy CAMERAS-to-NTP before policy CAMERAS-to-INTERNET …

操作系统3_作业与处理机调度

操作系统3_作业与处理机调度 文章目录 操作系统3_作业与处理机调度1. 作业的概念与组成2. 作业的建立及状态3. 处理机调度相关概念3.1 调度级别3.2 调度队列模型3.3 选择准则4. 作业调度与进程调度5. 典型处理机调度算法5.1 先来先服务算法FCFS5.2 短作业优先算法SJF5.3 优先级…

拨云见日,ATFX七场研讨会揭秘投资先机

财经先机&#xff0c;一手掌握。近期&#xff0c;随着国际金价持续走高&#xff0c;避险情绪高涨&#xff0c;由此激发新一轮投资热潮。作为业界领先的金融创新品牌&#xff0c;ATFX深受投资者认可和信赖&#xff0c;为助力广大投资者了解市场运行规律&#xff0c;捕捉财经脉络…

怎么画思维导图?方法介绍

怎么画思维导图&#xff1f;在数字化时代&#xff0c;思维导图已成为我们工作、学习和生活中的得力助手。它不仅能帮助我们更好地组织和表达思想&#xff0c;还能提升我们的思维能力和创造力。那么&#xff0c;哪些软件可以画思维导图呢&#xff1f;本文将为你揭秘几款功能强大…

Linux 应用入门(一)

1. 交叉编译 概念&#xff1a;在当前编译平台下&#xff0c;编译出来的程序能运行在体系结构不同的另一种目标平台上&#xff0c;但是编译平台本身却不能运行该程序。 为什么需要交叉编译&#xff1f; 速度&#xff1a;目标平台得运行速度比主机往往慢得多&#xff0c;因为许多…

Docker+nginx部署SpringBoot+vue前后端分离项目(保姆及入门指南)

前后分离项目部署 项目回顾工具上线准备1、win1.1、前端1.2、后端 2、linux环境2.1、安装docker2.2、安装docker compose2.3、编写Dockerfile文件2.4、编写docker-compose.yml文件2.5、修改application-pro.yml2.6、准备好nginx的挂载目录和配置2.7、部署后端服务 项目回顾 书…

数据挖掘实战-基于内容协同过滤算法的电影推荐系统

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

OpenHarmony集成OCR三方库实现文字提取

1. 简介 Tesseract(Apache 2.0 License)是一个可以进行图像OCR识别的C库&#xff0c;可以跨平台运行 。本样例基于Tesseract库进行适配&#xff0c;使其可以运行在OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”&#xff09;上&#xff0c;并新增N-API接口供上层应…

Ubuntu服务器运行Subspace节点和Farm

提供Subspace 节点部署&性能优化&机房托管&运维监控等服务。myto88 磁盘格式化 将插入的磁盘格式化。 sudo mkfs.ext4 -m 0 -T largefile4 /dev/sd*磁盘挂载 此处为语雀内容卡片&#xff0c;点击链接查看&#xff1a;https://www.yuque.com/u25096009/lvoxa…