Firebase 使用 Google Cloud 服務帳戶來操作和管理服務,而無需共享用戶憑據。當您創建使用 Cloud Storage 的 Firebase 項目時,您可能會注意到相應的服務帳戶已在您的項目中可用: service-<project number>@gcp-sa-firebasestorage.iam.gserviceaccount.com
。有關詳細信息,請參閱此Firebase 支持指南。
實際上,適用於雲存儲的 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.js 、 Java 、 go 、 Python 、 PHP和Ruby中可用。
有關更多信息,包括安裝說明、身份驗證和故障排除,請參閱上面鏈接的特定於平台的文檔。
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}"
休息API
如果您使用的是一種沒有客戶端庫的語言,想要做一些客戶端庫不會做的事情,或者只是有一個您喜歡使用的最喜歡的 HTTP 客戶端,Google Cloud Storage 為JSON和XML提供了 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 是一種多租戶服務,這意味著用戶共享同一組底層資源。為了最好地利用這些共享資源,buckets有一個初始IO容量。
當您計劃將 Cloud Storage for Firebase 集成到您的應用程序中時,請考慮您的應用程序為獲得良好性能所需的最低請求率,並考慮如何高效地發出請求。查看有關請求率的指南,尤其是提高請求率。
對象版本控制
您是否曾經不小心刪除了某些內容而沒有備份? Google Cloud Storage 支持對象版本控制,它提供了一種自動備份數據並從這些備份中恢復數據的方法。您可以使用gsutil
versioning set
命令啟用對象版本控制:
gsutil versioning set on gs://<your-cloud-storage-bucket>
Cloud Storage 始終選擇最新版本,因此如果要恢復對象,您需要使用上述其他 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 是一種“平台即服務”,可根據接收到的流量自動擴展後端邏輯。只需上傳您的後端代碼,Google 就會管理您應用的可用性;沒有服務器供您配置或維護。 App Engine 是一種快速簡便的方法,可以為您的 Firebase 應用程序添加額外的處理能力或可信的執行。
用於雲存儲的 Firebase SDK 使用 App Engine 默認存儲桶,這意味著如果您構建 App Engine 應用程序,則可以使用內置的 App Engine API 在 Firebase 和 App Engine 之間共享數據。這對於執行音頻編碼、視頻轉碼和圖像轉換以及其他計算密集型後台處理非常有用。
App Engine 的 Java、Python 和 go Standard 環境包括 App Engine 圖像 API( Java 、 Python ,它可以調整圖像大小、旋轉、翻轉和裁剪圖像,以及返回允許客戶端轉換的圖像服務 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 應用程序:
- 該項目包含一個以前的 App Engine 數據存儲主/從應用程序。
- 該項目有一個以域為前綴的項目 ID,例如:
domain.com:project-1234
:project-1234。
在任何一種情況下,該項目都不支持 Cloud Storage for Firebase,您應該創建一個新的 Firebase 項目才能使用 Cloud Storage。聯繫支持人員,以便我們為您提供幫助。
谷歌云功能(測試版)
Google Cloud Functions是一種輕量級、基於事件的異步計算解決方案,可讓您創建小型、單一用途的函數來響應事件,而無需管理服務器或運行時環境。這些功能可用於轉碼視頻、使用機器學習對圖像進行分類或將元數據與 Firebase 實時數據庫同步。與 App Engine 相比,Cloud Functions 的開銷甚至更少,是對 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 多種語言。