使用 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.pswp.cn/bicheng/14404.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/14404.shtml
英文地址,請注明出處:http://en.pswp.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(外部按鍵)。而基于…

Tron 節點 性能壓測

文章目錄 一、代碼說明1.1 主要功能1.2 代碼示例1.3 代碼解釋1.4 執行流程 二、結果分析三、參數解釋3.1 numWorkers 和 numRequests 說明3.2 使用場景 四、注意事項 最近搭建了一個TRON節點,同事不相信我的自建節點比官方更靠譜,咱們給他使用golang寫一…

如何成為一個專業的AI產品經理?

可以找專業的老師帶。 可以找專業的內容學。 可以多遇挫折并快速學習,屢敗屢戰,筆者本人從業AI十年有余,吃了不少苦,有過很多或成功或失敗的經歷。 成為一個專業的AI產品經理需要一系列專業知識和技能的積累,以及在…

axios - 簡 單 的 請 求 模 板

import {message } from ant-design-vue import axios from axios import {useUserStore } from @/store/modules/user import router from @/routerconst instance = axios.create({baseURL: http://192.168.110.171:5201,timeout: 5000, })* 請求攔截器 insta

切換Ubuntu開機的主題

要將Ubuntu系統的啟動畫面(即開機時的顯示界面)從Lubuntu切換回原生的Ubuntu界面,可以按照以下步驟操作: 1. 安裝原生Ubuntu的plymouth主題 首先,確保你已經安裝了原生Ubuntu的plymouth主題。打開終端并運行以下命令…

基于Matlab卷積神經網絡(CNN)人臉識別系統

歡迎大家點贊、收藏、關注、評論啦 ,由于篇幅有限,只展示了部分核心代碼。 文章目錄 一項目簡介 二、功能三、系統四. 總結 一項目簡介 一、項目背景與意義 人臉識別技術作為計算機視覺領域的一個重要分支,已經廣泛應用于安全監控、身份驗證…

Python基礎知識歸納總結

目錄 一、線性表 總結 二、棧 三、隊列 四、哈希表 五、字符串 六、正則表達式 綜合示例 一、線性表 線性表(通常用列表表示)是一種按線性順序存儲元素的數據結構。 插入元素 (append, insert) 刪除元素 (remove, pop) 查找元素 (index) 更新…

FreeRTOS學習——FreeRTOS隊列(下)之隊列創建

本篇文章記錄我學習FreeRTOS隊列創建的知識。主要分享隊列創建需要使用的初始化函數、隊列復位函數。 需要進一步了解FreeRTOS隊列的相關知識,讀者可以參考以下文章: FreeRTOS學習——FreeRTOS隊列(上)_freertos 單元素隊列-CSDN博…

Spring、SpringMVC、SpringBoot 三者之間是什么關系

Spring、SpringMVC、SpringBoot 是三個獨立的框架,它們之間的關系是: 1. Spring是一個Java的輕量級應用框架,提供了基于IoC和AOP的支持,用于構建企業級應用。Spring有多 個模塊,包括 Spring Core、Spring Context、Spring JDBC、…

高質量油封選擇的重要性

在現代工業和機械系統中,油封的作用至關重要。它們不僅防止潤滑劑泄漏,還阻止污染物進入系統,從而保障設備的正常運行。選擇高質量的油封對于保證設備性能、延長使用壽命和降低維護成本至關重要。本文將從多個角度探討選擇高質量油封的重要性…

【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…

送變電乙級資質申請攻略:關鍵步驟與注意事項

關鍵步驟: 工商注冊與資本核實: 確保企業已正式注冊,且注冊資金不少于100萬元人民幣,同時準備企業法人營業執照等相關證明文件。 人員配置與注冊: 根據資質要求,配置齊全合理的專業技術人員,包括…

【教程】Linux 安裝 kkFileView 文檔在線預覽項目 及優化

【教程】Linux 安裝 kkFileView 文檔在線預覽項目 官網 kkFileView - 在線文件預覽 (keking.cn) 安裝包 可以直接下載成品 也可以下載source 源碼 自己編譯 kkFileView 發行版 - Gitee.com 打開IDEA 然后先clear 再install 然后在 file-online-preview\server\target 目錄…

Nginx R31 doc-09-Serving Static Content 靜態內容

提供靜態內容 配置 NGINX 和 NGINX Plus 以提供靜態內容,使用類型特定的根目錄,檢查文件存在性,并進行性能優化。 本節介紹如何配置 NGINX 和 NGINX Plus 以提供靜態內容,如何定義搜索請求文件的路徑,如何設置索引文…

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…

刀片式服務器的主要組件有哪些?

刀片式服務器是專門為特殊應用行業跟高密度計算環境設計的,是高可用高密度低成本的服務器平臺,刀片服務器這個名稱主要是根據產品的形狀,刀片式服務器的組成單元外形扁平,就像刀片一樣,整體設計的比較緊湊,…

C#和C++有什么區別?

C#和C都是廣泛使用的編程語言,但它們在設計理念、應用場景和語法上有許多顯著的區別。以下是一些關鍵區別的詳細介紹: 1. 設計理念和目的 C: 設計目的:C是一種面向系統編程和應用程序開發的語言,具有高效性和靈活性…