Cloud Storage for Firebase 可将您的数据存储在 Google Cloud Storage 存储桶中,这是一种 EB 级对象存储解决方案,不仅可用性高,还能实现全局冗余。借助 Firebase Admin SDK,您可以从特权环境直接访问 Cloud Storage 存储桶。然后可以使用 Google Cloud Storage API 来操控存储桶中存储的对象。
Admin SDK 还支持创建可共享的网址,以便用户下载您的存储桶中的对象。
此外,请确保您的 Firebase 项目采用的是随用随付 Blaze 定价方案;这项要求已于 2024 年 10 月生效(请参阅我们的常见问题解答)。如果您是 Firebase 和 Google Cloud 新手,请确认您是否有资格获得 300 美元赠金。
使用默认存储桶
您可以在初始化 Admin SDK 时指定默认存储桶的名称,然后可以检索对该存储桶的经过身份验证的引用。
存储桶名称不得包含 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 https://cloud.google.com/java/docs/reference/google-cloud-storage/latest/com.google.cloud.storage.Bucket
// 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.