與 Google Cloud 整合

Cloud Storage for Firebase 已與 Google CloudCloud Storage 適用的 Firebase SDK 將檔案直接儲存在 Google Cloud Storage 個值區, 隨著應用程式業務拓展 你可以輕鬆整合其他 Google Cloud 服務 例如 App Engine、Cloud Functions 或機器 例如 Cloud Vision 或 Google Translate 等 API

Firebase 會透過 Google Cloud 個服務帳戶操作及管理服務 而不必分享使用者憑證建立使用 Cloud Storage,您可能會發現對應的服務帳戶為 可讓您的專案已具備下列條件: service-<project number>@gcp-sa-firebasestorage.iam.gserviceaccount.com。詳情請見 如需其他資訊,請參閱這篇 Firebase 支援指南 可能不準確或不適當

一般來說,Cloud Storage 適用的 Firebase SDK 會使用 App Engine 免費方案,這個 可讓您快速開始使用 Cloud Storage 不必輸入信用卡或啟用 Cloud Billing 帳戶。此外, 可讓您輕鬆在 Firebase 和 Google Cloud 專案之間共用資料。

Google Cloud 整合,包括匯入現有的 Cloud Storage 值區,必須採用 Blaze 方案的 Firebase 專案。如想進一步瞭解來電目錄、轉接和錄音服務政策, 方案。詳情請參閱定價頁面

Google Cloud Storage

您可以使用 Google Cloud Storage API 存取透過 Cloud StorageFirebase SDK 上傳的檔案,尤其是 執行更複雜的作業,例如複製或移動檔案,或是列出 所有可供參考的檔案

請特別注意,這些要求使用 Google Cloud Storage 存取權控管選項 而非 Firebase AuthenticationCloud Storage Security Rules

API

除了 Cloud Storage 適用的 Firebase SDK 之外,您還可以使用其他方式 存取儲存在 Cloud Storage 值區中的資料,具體取決於您 想執行的操作如果您在伺服器上存取資料,我們提供了伺服器端 程式庫,以及與 JSON 和 S3 相容的 XML RESTful API 變更指令碼或執行其他管理工作 也會派上用場的指令列工具

Google Cloud 個伺服器 SDK

Google Cloud 提供了優質的伺服器 SDK, Cloud 產品,包含 Cloud Storage這些程式庫可在 Node.jsJavagoPythonPHP、 和 Ruby

安裝指示、驗證與 請參閱上方連結中的平台專屬說明文件

以下是 Google Cloud Storage SDK 的使用範例:

Node.js

    // Require gcloud
    var gcloud = require('google-cloud');

    // Enable Cloud Storage
    var gcs = gcloud.storage({
      projectId: 'grape-spaceship-123',
      keyFilename: '/path/to/keyfile.json'
    });

    // Reference an existing bucket.
    var bucket = gcs.bucket('my-existing-bucket');

    // Upload a local file to a new file to be created in your bucket.
    bucket.upload('/photos/zoo/zebra.jpg', function(err, file) {
      if (!err) {
        // "zebra.jpg" is now in your bucket.
      }
    });

    // Download a file from your bucket.
    bucket.file('giraffe.jpg').download({
      destination: '/photos/zoo/giraffe.jpg'
    }, function(err) {});
    

Java

    // Enable Cloud Storage
    Storage storage = StorageOptions.builder()
      .authCredentials(AuthCredentials.createForJson(new FileInputStream("/path/to/my/key.json"))
      .build()
      .service();

    // Upload a local file to a new file to be created in your bucket.
    InputStream uploadContent = ...
    BlobId blobId = BlobId.of("my-existing-bucket", "zebra.jpg");
    BlobInfo blobInfo = BlobInfo.builder(blobId).contentType("text/plain").build();
    Blob zebraBlob = storage.create(blobInfo, content);

    // Download a file from your bucket.
    Blob giraffeBlob = storage.get("my-existing-bucket", "giraffe.jpg", null);
    InputStream downloadContent = giraffeBlob.getInputStream();
    

Go

    // Enable Cloud Storage
    client, err := storage.NewClient(ctx, option.WithServiceAccountFile("path/to/keyfile.json"))
    if err != nil {
        log.Fatal(err)
    }

    // Download a file from your bucket.
    rc, err := client.Bucket("my-existing-bucket").Object("giraffe.jpg").NewReader(ctx)
    if err != nil {
        log.Fatal(err)
    }
    defer rc.Close()
    body, err := ioutil.ReadAll(rc)
    if err != nil {
        log.Fatal(err)
    }
    

Python

    # Import gcloud
    from google.cloud import storage

    # Enable Cloud Storage
    client = storage.Client()

    # Reference an existing bucket.
    bucket = client.get_bucket('my-existing-bucket')

    # Upload a local file to a new file to be created in your bucket.
    zebraBlob = bucket.get_blob('zebra.jpg')
    zebraBlob.upload_from_filename(filename='/photos/zoo/zebra.jpg')

    # Download a file from your bucket.
    giraffeBlob = bucket.get_blob('giraffe.jpg')
    giraffeBlob.download_as_string()
    

PHP

    // Require gcloud
    require 'vendor/autoload.php';
    use Google\Cloud\Storage\StorageClient;

    // Enable Cloud Storage
    $storage = new StorageClient([
        'projectId' => 'grape-spaceship-123'
    ]);

    // Reference an existing bucket.
    $bucket = $storage->bucket('my-existing-bucket');

    // Upload a file to the bucket.
    $bucket->upload(
        fopen('/photos/zoo/zebra.jpg', 'r')
    );

    // Download a file from your bucket.
    $object = $bucket->object('giraffe.jpg');
    $object->downloadToFile('/photos/zoo/giraffe.jpg');
    

Ruby

    # Require gcloud
    require "google/cloud"

    # Enable Cloud Storage
    gcloud = Google::Cloud.new "grape-spaceship-123", "/path/to/keyfile.json"
    storage = gcloud.storage

    # Reference an existing bucket.
    bucket = storage.bucket "my-existing-bucket"

    # Upload a file to the bucket.
    bucket.create_file "/photos/zoo/zebra.jpg", "zebra.jpg"

    # Download a file from your bucket.
    file = bucket.file "giraffe.jpg"
    file.download "/photos/zoo/#{file.name}"
    

REST API

如果您使用沒有用戶端程式庫的語言, 或單純使用偏好的 HTTP 用戶端 Google Cloud Storage 提供兩者的 API JSONXML

除了上述儲存空間資料存取 API 外,也要管理 Cloud Storage 值區 在 Firebase 專案中,您可以使用 Cloud Storage for Firebase API

gsutil

gsutil 是指令 您可以直接使用 Cloud Storage您可以使用「gsutil」 執行多種值區和物件管理工作,包括:

  • 上傳、下載及刪除物件。
  • 列出值區和物件。
  • 移動、複製及重新命名物件。
  • 編輯物件和值區 ACL。

gsutil」可執行其他進階作業,例如從單一項目移動檔案 上傳到另一個目錄,或是刪除特定位置下的所有檔案。

將所有檔案從一個參照項目移至另一個參照,方法很簡單:

gsutil mv gs://bucket/old/reference gs://bucket/new/reference

批次刪除參照下方的所有檔案也同樣符合直覺:

# Delete all files under a path
gsutil rm -r gs://bucket/reference/to/delete

# Delete all the files in a bucket but not the bucket gsutil rm -r gs://bucket/**

# Delete all the files AND the bucket # Removing the default bucket will break the Firebase SDKs for Cloud Storage and is strongly discouraged gsutil rm -r gs://bucket

要求比率

Google Cloud Storage 是採用自動調整資源配置功能的高擴充性服務 實現極高的要求比率

Google Cloud Storage 是一項多用戶群服務,也就是說,使用者可以 相同的基礎資源組合為了充分運用 共用資源,值區則有初始 IO 容量。

如果您打算將 Cloud Storage for Firebase 整合至應用程式中,請思考以下幾點: 也就是應用程式維持良好效能所需的最低要求比率 有效處理要求請參閱要求比率相關規範。 尤其要提高要求比率

物件版本管理

您是否曾經不小心刪除了資料,卻沒有備份? 「Google Cloud Storage」支援 物件版本管理、 可讓您自動備份及還原 備份。您可以使用 gsutil versioning set 啟用物件版本管理功能 指令:

gsutil versioning set on gs://<your-cloud-storage-bucket>

Cloud Storage 一律會採用最新版本,因此如果您要選擇 還原物件時,您必須使用上述其他 API 或工具 將所需物件當做最新的

物件生命週期管理

而系統會自動封存或刪除過時的檔案 這個 API 可以滿足許多應用程式的需求幸好,Google Cloud Storage 提供了 物件生命週期管理, 可讓您在一段時間後刪除或封存物件

考慮使用相片共享應用程式刪除所有相片 短短一天內就能完成您可以設定物件生命週期政策,如下所示:

// lifecycle.json
{
  "lifecycle": {
    "rule":
    [
      {
        "action": {"type": "Delete"},
        "condition": {"age": 1}
      }
    ]
  }
}

並使用 gsutil lifecycle set 指令部署:

gsutil lifecycle set lifecycle.json gs://<your-cloud-storage-bucket>

請注意,這適用於值區中的所有檔案,因此 方便長期儲存重要的使用者備份 如果有想每天刪除的側邊相片,建議你另外使用兩張 使用 gsutil 或自己的伺服器手動刪除值區,或手動執行刪除作業。

App Engine

App Engine 是一項「平台式服務」會自動調度後端資源 或邏輯來回應接收的流量。只要上傳後端即可 Google 會管理應用程式的供應情形沒有伺服器 並佈建或維護 VMApp Engine 可讓你輕鬆快速地新增 能為您的 Firebase 應用程式增加處理能力或受信任的執行程序。

Cloud StorageFirebase SDK 會使用 App Engine 預設值區,也就是說 如果您建構 App Engine 應用程式,可以使用內建的 App Engine 用來在 Firebase 和 App Engine 之間共用資料的 API。這對於使用者 音訊編碼、影片轉碼和圖片轉換 和其他需要大量計算的背景處理作業一樣

Java、Python 和 標準環境 App Engine 包含 App Engine Images API (JavaPython,則很適合 調整大小、旋轉、翻轉和裁剪圖片,以及傳回提供圖片的網址 能讓您進行用戶端轉換,類似於 Cloudinary 和 Imgix。

將現有的 Google Cloud 專案匯入 Firebase 時,如要: 在 Firebase 中提供任何現有的 App Engine 物件,您就必須 物件的預設存取權控管方式,允許 Firebase 依據 執行下列指令 gsutil:

gsutil -m acl ch -r -u service-<project number;gt@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://<your-cloud-storage-bucket>

已知問題

您無法匯入 App Engine 應用程式有兩種已知情況:

  1. 專案含有先前的 App Engine Datastore 主從/從屬作業 應用程式。
  2. 專案有網域前置字串的專案 ID,例如: domain.com:project-1234

無論是哪種情況,專案都不支援 Cloud Storage for Firebase, 請務必建立新的 Firebase 專案 Cloud Storage與支援團隊聯絡 ,方便我們為您提供協助

Google Cloud Functions (Beta 版)

Google Cloud Functions 依事件執行的輕量非同步運算解決方案,可讓您 建立單一用途的小型函式來回應事件,不需要 管理伺服器或執行階段環境這些函式可用於 將影片轉碼、使用機器學習或同步處理功能將圖片分類 中繼資料與 Firebase Realtime Database 一起使用。負擔比 App Engine,Cloud Functions 是因應 Cloud Storage

Google Cloud Vision API

Google Cloud Vision API 可讓您 開發人員可以利用這項工具 和機器學習模型能快速將圖片分類 偵測圖片中的個別物體和臉孔 尋找並閱讀圖片中的印刷文字,辨識令人反感的內容 甚至提供圖片情緒分析

Google Cloud Speech API

與 Vision API 類似 Google Cloud Speech API 啟用 開發人員,以便從儲存在 Cloud Storage 的音訊檔案中擷取文字。 這個 API 可辨識超過 80 種語言和方言,滿足全球各地使用者的需求 基礎與 Google Cloud Natural Language API 開發人員可以擷取原始文字並推斷該文字的意義。 如果需要全球觀眾,請以 使用 Google Translate API 進行翻譯 支援超過 90 種語言