Cloud Storage for Firebase 會將資料儲存在 Google Cloud Storage 值區中,這是具備高可用性和全球備援機制的 Exabyte 等級物件儲存空間解決方案。Firebase Admin SDK 可讓您直接從特權環境存取 Cloud Storage 儲存桶。接著,您可以使用 Google Cloud Storage API 操作儲存在值區中的物件。
Admin SDK 也能讓您建立可分享的網址,方便使用者下載儲存體中的物件。
使用預設值區
您可以在初始化 Admin SDK 時指定預設值區名稱。接著,您可以擷取這個值區的已驗證參照。
bucket 名稱「不得」包含 gs://
或任何其他通訊協定前置字串。舉例來說,如果 Firebase 控制台顯示的值區網址為 gs://PROJECT_ID.firebasestorage.app
,請將字串 PROJECT_ID.firebasestorage.app
傳遞至 Admin SDK。
Node.js
const { initializeApp, cert } = require('firebase-admin/app');
const { getStorage } = require('firebase-admin/storage');
const serviceAccount = require('./path/to/serviceAccountKey.json');
initializeApp({
credential: cert(serviceAccount),
storageBucket: '<BUCKET_NAME>.appspot.com'
});
const bucket = getStorage().bucket();
// 'bucket' is an object defined in the @google-cloud/storage library.
// See https://googlecloudplatform.github.io/google-cloud-node/#/docs/storage/latest/storage/bucket
// for more details.
Java
FileInputStream serviceAccount = new FileInputStream("path/to/serviceAccountKey.json");
FirebaseOptions options = FirebaseOptions.builder()
.setCredentials(GoogleCredentials.fromStream(serviceAccount))
.setStorageBucket("<BUCKET_NAME>.appspot.com")
.build();
FirebaseApp.initializeApp(options);
Bucket bucket = StorageClient.getInstance().bucket();
// 'bucket' is an object defined in the google-cloud-storage Java library.
// See http://googlecloudplatform.github.io/google-cloud-java/latest/apidocs/com/google/cloud/storage/Bucket.html
// for more details.
Python
import firebase_admin
from firebase_admin import credentials
from firebase_admin import storage
cred = credentials.Certificate('path/to/serviceAccountKey.json')
firebase_admin.initialize_app(cred, {
'storageBucket': 'PROJECT_ID.firebasestorage.app'
})
bucket = storage.bucket()
# 'bucket' is an object defined in the google-cloud-storage Python library.
# See https://googlecloudplatform.github.io/google-cloud-python/latest/storage/buckets.html
# for more details.
Go
import (
"context"
"log"
firebase "firebase.google.com/go/v4"
"firebase.google.com/go/v4/auth"
"google.golang.org/api/option"
)
config := &firebase.Config{
StorageBucket: "<BUCKET_NAME>.appspot.com",
}
opt := option.WithCredentialsFile("path/to/serviceAccountKey.json")
app, err := firebase.NewApp(context.Background(), config, opt)
if err != nil {
log.Fatalln(err)
}
client, err := app.Storage(context.Background())
if err != nil {
log.Fatalln(err)
}
bucket, err := client.DefaultBucket()
if err != nil {
log.Fatalln(err)
}
// 'bucket' is an object defined in the cloud.google.com/go/storage package.
// See https://godoc.org/cloud.google.com/go/storage#BucketHandle
// for more details.
您可以使用 Admin SDK 傳回的資料夾參照,搭配官方 Google Cloud Storage 用戶端程式庫,在與 Firebase 專案相關聯的資料夾中上傳、下載及修改內容。請注意,使用 Firebase Admin SDK 時,您不必驗證 Google Cloud Storage 程式庫。透過 Admin SDK 傳回的資料夾參照已透過用於初始化 Firebase 應用程式的憑證進行驗證。
使用自訂值區
如果您想使用本指南前述的預設值區以外的 Cloud Storage 值區,或是在單一應用程式中使用多個 Cloud Storage 值區,可以擷取自訂值區的參照:
Node.js
const bucket = getStorage().bucket('my-custom-bucket');
Java
Bucket bucket = StorageClient.getInstance().bucket("my-custom-bucket");
Python
bucket = storage.bucket('my-custom-bucket')
Go
bucket, err := client.Bucket("my-custom-bucket")
使用自訂 Firebase 應用程式
如要建構與多個 Firebase 應用程式互動且較為複雜的應用程式,您可以依照下列方式存取與特定 Firebase 應用程式相關聯的 Cloud Storage 值區:
Node.js
const bucket = getStorage(customApp).bucket();
Java
Bucket bucket = StorageClient.getInstance(customApp).bucket();
Python
bucket = storage.bucket(app=custom_app)
Go
otherClient, err := otherApp.Storage(context.Background())
bucket, err := otherClient.Bucket("other-app-bucket")
取得可分享的下載網址
您可以使用 Admin SDK,為儲存在儲存桶中的檔案產生不會過期的下載網址。任何知道這個網址的人都能永久存取檔案。
Node.js
const { getStorage, getDownloadURL } = require('firebase-admin/storage');
const fileRef = getStorage().bucket('my-bucket').file('my-file');
const downloadURL= await getDownloadURL(fileRef);
Google Cloud Storage 用戶端程式庫
Firebase Admin SDK 會依賴 Google Cloud Storage 用戶端程式庫提供 Cloud Storage 存取權。由 Admin SDK 傳回的值區參照,是這些程式庫中定義的物件。請參閱 Google Cloud Storage 用戶端程式庫的說明文件和 API 參考資料,瞭解如何在檔案上傳和下載等用途中使用傳回的儲存格參照。