Check out what’s new from Firebase at Google I/O 2022. Learn more

與穀歌云集成

Cloud Storage for Firebase 與Google Cloud緊密集成。用於 Cloud Storage 的 Firebase SDK 將文件直接存儲在Google Cloud Storage 存儲桶中,隨著應用程序的增長,您可以輕鬆集成其他 Google Cloud 服務,例如 App Engine 或 Cloud Functions 等託管計算,或 Cloud Vision 或 Google 等機器學習 API翻譯。

Firebase 使用 Google Cloud 服務帳號來操作和管理服務,而無需共享用戶憑據。當您創建使用 Cloud Storage 的 Firebase 項目時,您可能會注意到相應的服務帳號已在您的項目中可用: 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 API訪問通過適用於 Cloud Storage 的 Firebase SDK 上傳的文件,尤其是執行更複雜的操作,例如復製或移動文件,或列出所有可用文件以供參考。

請務必注意,這些請求使用 Google Cloud Storage訪問控制選項,而不是 Firebase 身份驗證和 Cloud Storage 安全規則。

蜜蜂

除了適用於 Cloud Storage 的 Firebase SDK,還有許多其他方法可以訪問存儲在 Cloud Storage 存儲分區中的數據,具體取決於您要執行的操作。如果您要訪問服務器上的數據,我們提供服務器端庫以及兼容JSON和 S3 的XML RESTful API,或者如果您需要編寫腳本更改或執行其他管理任務,我們提供了一個命令行工具會派上用場的。

谷歌云服務器 SDK

Google Cloud 為包括 Cloud Storage 在內的許多雲產品提供高質量的服務器 SDK。這些庫在Node.jsJavagoPythonPHPRuby中可用。

有關更多信息,包括安裝說明、身份驗證和故障排除,請參閱上面鏈接的特定於平台的文檔。

Google Cloud Storage SDK 的示例用法如下所示:

節點.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) {});
    

爪哇

    // 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();
    

    // 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');
    

紅寶石

    # 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 為JSONXML提供 API .

除了這些存儲數據訪問 API,要管理用於 Firebase 項目的 Cloud Storage 存儲分區,您還可以使用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 支持Object Versioning ,它提供了一種自動備份數據並從這些備份中恢復的方式。您可以使用gsutil versioning set命令啟用對象版本控制:

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

Cloud Storage 始終選擇最新版本,因此如果您要恢復對象,則需要使用上述其他 API 或工具之一將所需對象設置為最新版本。

對像生命週期管理

能夠自動歸檔或刪除陳舊文件是許多應用程序的有用功能。幸運的是,谷歌云存儲提供對像生命週期管理,允許您在一定時間後刪除或歸檔對象。

考慮一個照片共享應用程序,您希望在一天內刪除所有照片。您可以按如下方式設置對像生命週期策略:

// 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 是一種“平台即服務”,可根據接收到的流量自動擴展後端邏輯。只需上傳您的後端代碼,Google 就會管理您應用的可用性;沒有供您配置或維護的服務器。 App Engine 是一種為您的 Firebase 應用程序添加額外處理能力或可信執行的快速而簡單的方法。

Cloud Storage 的 Firebase SDK 使用 App Engine 默認存儲桶,這意味著如果您構建 App Engine 應用程序,您可以使用內置的 App Engine API 在 Firebase 和 App Engine 之間共享數據。這對於執行音頻編碼、視頻轉碼和圖像轉換以及其他計算密集型後台處理很有用。

App Engine 的 Java、Python 和 go標準環境包括 App Engine Images API( JavaPython ),它可以調整圖像大小、旋轉、翻轉和裁剪圖像,並返回允許客戶端轉換的圖像服務 URL ,類似於 Cloudinary 和 Imgix。

將現有的 Google Cloud 項目導入 Firebase 時,如果您想讓任何現有的 App Engine 對像在 Firebase 中可用,您需要在對像上設置默認訪問控制,以允許 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 數據存儲區主/從應用程序。
  2. 該項目具有以域為前綴的項目 ID,例如: domain.com:project-1234

在這兩種情況下,該項目都不支持 Cloud Storage for Firebase,您應該創建一個新的 Firebase 項目才能使用 Cloud Storage。聯繫支持,以便我們為您提供幫助。

谷歌云函數(測試版)

Google Cloud Functions是一種輕量級、基於事件的異步計算解決方案,允許您創建小型、單一用途的函數來響應事件,而無需管理服務器或運行時環境。這些函數可用於對視頻進行轉碼、使用機器學習對圖像進行分類或將元數據與 Firebase 實時數據庫同步。 Cloud Functions 的開銷甚至低於 App Engine,是對 Cloud Storage 變化做出反應的最快方式。

谷歌云視覺 API

Google Cloud Vision API使開發人員能夠通過將強大的機器學習模型封裝在一個易於使用的 API 中來理解圖像的內容。它可以快速將圖像分類成數千個類別,檢測圖像中的單個對象和人臉,查找並讀取圖像中包含的印刷文字,識別攻擊性內容,甚至提供圖像情感分析。

谷歌云語音 API

與 Vision API 類似, Google Cloud Speech API使開發人員能夠從存儲在 Cloud Storage 中的音頻文件中提取文本。該 API 可識別 80 多種語言和變體,以支持您的全球用戶群。與Google Cloud Natural Language API結合使用時,開發人員既可以提取原始文本,也可以推斷該文本的含義。如果需要全球受眾,請將其與Google Translate API結合使用,將文本翻譯成 90 多種語言。