與穀歌云集成

雲存儲的火力地堡完全地集成在谷歌雲。在火力地堡的SDK用於雲存儲存儲文件直接在谷歌雲存儲桶,並為您的應用程序的增長,你可以輕鬆地集成其他谷歌雲服務,比如像App Engine的或雲功能,或像雲願景或谷歌的機器學習的API進行管理的計算翻譯。

Firebase 使用 Google Cloud 服務帳號來操作和管理服務,而無需共享用戶憑據。當您創建一個使用雲存儲一個火力地堡的項目,你可能會注意到,相應的服務帳戶已經可以在您的項目: service-<project number>@gcp-sa-firebasestorage.iam.gserviceaccount.com 。看到這個火力地堡支持指南獲取更多信息。

引擎蓋下,火力地堡的SDK用於雲存儲使用的默認鬥App Engine的自由層。這使您可以快速啟動並運行 Cloud Storage,而無需輸入信用卡或啟用 Cloud Billing 帳號。它還允許您在 Firebase 和 Google Cloud 項目之間輕鬆共享數據。

與 Google Cloud 集成(包括導入現有的 Cloud Storage 存儲分區)需要 Blaze 計劃中的 Firebase 項目。了解更多關於我們的計劃定價頁面

谷歌云存儲

您可以使用谷歌雲存儲API ,以通過SDK的火力地堡的雲存儲上傳的訪問文件,特別是執行更複雜的操作,比如複製或移動文件,或列出了所有可用的參考文件。

需要注意的是這些請求使用谷歌雲存儲是非常重要的訪問控制選項,而非火力地堡認證和雲存儲安全規則。

蜜蜂

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

Google Cloud 服務器 SDK

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

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

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客戶端,你更喜歡使用兩個,谷歌雲存儲的API提供JSONXML .

除了這些存儲的數據訪問API,管理雲存儲桶用於火力地堡的項目,你可以使用雲存儲的火力地堡API

gsutil

gsutil是一個命令行工具,它為您提供了雲存儲的直接訪問。您可以使用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 是一項多租戶服務,這意味著用戶共享同一組底層資源。為了充分利用這些共享資源,bucket 具有初始 IO 容量。

當您計劃將 Cloud Storage for Firebase 集成到您的應用中時,請考慮您的應用獲得良好性能所需的最低請求率,以及有效地發出請求。關於審查指南請求率,尤其是斜坡上升請求率

對象版本控制

您是否曾經不小心刪除了某些內容而沒有備份?谷歌雲存儲支持對象版本,它提供了一個自動的方式,從這些備份您的數據備份和恢復。您可以啟用對象使用版本控制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 之間共享數據。這對於執行音頻編碼、視頻轉碼和圖像轉換以及其他計算密集型後台處理非常有用。

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

當導入現有的谷歌雲項目進入火力地堡,如果你想使任何現有的App Engine的對象火力地堡,那麼您會需要設置你的對象的默認訪問控制,以使火力地堡訪問他們通過運行以下命令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. 該項目有一個域前綴的項目編號,例如: domain.com:project-1234

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

谷歌云函數(測試版)

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

谷歌云視覺 API

谷歌雲願景API使開發人員能夠通過一個易於使用的API封裝功能強大的機器學習模型來理解圖像的內容。它可以快速將圖像分為數千個類別,檢測圖像中的單個對象和麵部,查找和讀取圖像中包含的印刷文字,識別令人反感的內容,甚至提供圖像情感分析。

谷歌云語音 API

在視覺API類似,谷歌雲語音API使開發人員能夠提取文本從存儲在雲存儲的音頻文件。 API 可識別 80 多種語言和變體,以支持您的全球用戶群。當與結合谷歌雲自然語言API ,開發者可以提取兩者的原始文本,並推斷意義有關的文字。如果需要全球觀眾,這夫婦與谷歌翻譯API將文本翻譯成超過90種語言。