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://bucket-name.appspot.com
,請將字串 bucket-name.appspot.com
傳遞至 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': '<BUCKET_NAME>.appspot.com'
})
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 參考資料,瞭解如何在檔案上傳和下載等用途中使用傳回的儲存格參照。