Firebase 使用 Google Cloud 服務帳號來操作和管理服務,而無需共享用戶憑據。當您創建使用 Cloud Storage 的 Firebase 項目時,您可能會注意到項目中已有相應的服務帳號: service-<project number>@gcp-sa-firebasestorage.iam.gserviceaccount.com
。有關詳細信息,請參閱此Firebase 支持指南。
在幕後,Firebase SDK for Cloud Storage 使用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,或者如果您需要編寫更改腳本或執行其他管理任務,我們有一個命令行工具會派上用場的。
Google Cloud 服務器 SDK
Google Cloud 為多種雲產品(包括 Cloud Storage)提供高質量的服務器 SDK。這些庫可用於Node.js 、 Java 、 go 、 Python 、 PHP和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) {});
爪哇
// 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 是一項多租戶服務,這意味著用戶共享同一組底層資源。為了充分利用這些共享資源,桶有一個初始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標準環境包括 App Engine 圖像 API( Java 、 Python ),它可以調整圖像大小、旋轉、翻轉和裁剪圖像,並返回允許客戶端轉換的圖像服務 URL ,類似於 Cloudinary 和 Imgix。
將現有 Google Cloud 項目導入 Firebase 時,如果您想讓任何現有 App Engine 對像在 Firebase 中可用,則需要使用gsutil
運行以下命令來設置對象的默認訪問控制,以允許 Firebase 訪問它們:
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
1234 。
在這兩種情況下,項目都不支持 Cloud Storage for Firebase,您應該創建一個新的 Firebase 項目才能使用 Cloud Storage。聯繫支持人員以便我們為您提供幫助。
Google 雲函數(測試版)
Google Cloud Functions是一種輕量級、基於事件的異步計算解決方案,允許您創建小型、單一用途的函數來響應事件,而無需管理服務器或運行時環境。這些函數可用於對視頻進行轉碼、使用機器學習對圖像進行分類或將元數據與 Firebase 實時數據庫同步。 Cloud Functions 的開銷甚至比 App Engine 還要少,是對雲存儲中的變化做出反應的最快方式。
谷歌云視覺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 多種語言。