Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

與穀歌云集成

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

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 多種語言。