開始在 Flutter 中使用 Cloud Storage

Cloud Storage for Firebase 可讓您上傳及分享使用者原創內容,例如圖片和影片,讓您在應用程式中建構多媒體內容。您的資料會儲存在 Google Cloud Storage 值區中,這是一項具有高可用性和全球備援機制的 EB 等級物件儲存空間解決方案。您可以透過 Cloud Storage for Firebase,直接從行動裝置和網路瀏覽器安全上傳這些檔案,輕鬆處理網路不穩定的問題。

事前準備

  1. 如果您尚未完成,請務必完成 Flutter 應用程式入門指南。包括:

    • 建立 Firebase 專案。

    • 安裝及初始化 Flutter 適用的 Firebase SDK。

  2. 請確認您的 Firebase 專案採用即付即用 Blaze 定價方案。如果您剛開始使用 Firebase 和 Google Cloud,請確認是否符合 $300 美元抵免額的資格。

建立預設 Cloud Storage 值區

  1. Firebase 控制台的導覽窗格中,選取「儲存空間」

    如果專案尚未採用即付即用 Blaze 定價方案,系統會提示您升級專案。

  2. 按一下「開始使用」

  3. 選取預設值區的位置

  4. 為預設值區設定 Firebase Security Rules。開發期間,建議您設定公開存取規則

  5. 按一下「完成」

您現在可以在 Firebase 主控台的 Cloud Storage「Files」分頁中查看 bucket。預設值區名稱格式為 PROJECT_ID.firebasestorage.app

設定公開存取權

Firebase 專用 Cloud Storage 提供宣告式規則語言,可讓您定義資料的結構、索引方式,以及資料的讀取和寫入時機。根據預設,Cloud Storage 的讀取和寫入權限受到限制,因此只有經過驗證的使用者才能讀取或寫入資料。如要開始使用 Firebase 驗證,您可以設定公開存取權規則

這會讓任何人 (包括未使用您應用程式的使用者) 都能存取 Cloud Storage,因此請務必在設定驗證程序時再次限制 Cloud Storage。

在應用程式中加入 Cloud Storage SDK

  1. 在 Flutter 專案的根目錄中執行下列指令,安裝外掛程式:

    flutter pub add firebase_storage
    
  2. 完成後,請重新建構 Flutter 應用程式:

    flutter run
    
  3. 在 Dart 程式碼中匯入外掛程式:

    import 'package:firebase_storage/firebase_storage.dart';
    

設定 Cloud Storage

  1. 從 Flutter 專案目錄執行 flutterfire configure。這會更新應用程式程式碼集中的 Firebase 設定檔 (firebase_options.dart),讓檔案具有預設 Cloud Storage 值區的名稱。

  2. 建立 FirebaseStorage 的執行個體,即可存取 Cloud Storage 值區:

    final storage = FirebaseStorage.instance;
    
    // Alternatively, explicitly specify the bucket name URL.
    // final storage = FirebaseStorage.instanceFor(bucket: "gs://<var>BUCKET_NAME</var>");
    

您可以開始使用 Cloud Storage 了!

下一步?瞭解如何建立 Cloud Storage 參照

進階設定

以下幾種用途需要額外設定:

如果您的使用者遍布全球,且希望將資料儲存在使用者附近的位置,第一種用途就非常適合。舉例來說,您可以在美國、歐洲和亞洲建立資料集,以便為這些地區的使用者儲存資料,進而縮短延遲時間。

如果您有不同存取模式的資料,第二個用途就很實用。舉例來說,您可以設定多區域或區域值區,用於儲存相片或其他經常存取的內容,以及 Nearline 或 Coldline 值區,用於儲存使用者備份或其他不常存取的內容。

無論是哪種用途,都建議使用多個 Cloud Storage 值區

如果您要建構 Google 雲端硬碟這類應用程式,讓使用者可以登入多個帳戶 (例如個人帳戶和工作帳戶),第三種用途就很實用。您可以使用自訂 Firebase 應用程式執行個體驗證每個額外帳戶。

使用多個 Cloud Storage 值區

如果您想使用上述預設值區以外的 Cloud Storage 值區,或是在單一應用程式中使用多個 Cloud Storage 值區,可以建立 FirebaseStorage 的執行個體,讓其參照自訂值區:

// Get a non-default Storage bucket
final storage = FirebaseStorage.instanceFor(bucket: "gs://my-custom-bucket");

使用匯入的值區

將現有的 Cloud Storage 值區匯入 Firebase 時,您必須使用 Google Cloud SDK 中的 gsutil 工具,授予 Firebase 存取這些檔案的權限:

gsutil -m acl ch -r -u service-PROJECT_NUMBER@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://YOUR-CLOUD-STORAGE-BUCKET

您可以參閱Firebase 專案簡介,瞭解如何找出專案編號。

這項設定不會影響新建的值區,因為這些值區的預設存取控制項已設為允許 Firebase。這是暫時性措施,日後會自動執行。

使用自訂 Firebase 應用程式

如果您要使用自訂 FirebaseApp 建構較複雜的應用程式,可以建立 FirebaseStorage 例項,並透過該應用程式進行初始化:

// Use a non-default App
final storage = FirebaseStorage.instanceFor(app: customApp);

後續步驟