Cloud Storage for Firebase 将您的数据存储在Google Cloud Storage 存储桶中——一种具有高可用性和全局冗余的 EB 级对象存储解决方案。 Firebase Admin SDK 允许您直接从特权环境访问您的 Cloud Storage 存储桶。然后,您可以使用Google Cloud Storage API来操作存储在存储桶中的对象。
使用默认存储桶
您可以在初始化 Admin SDK 时指定默认存储桶名称。然后您可以检索对此存储桶的经过身份验证的引用。存储桶名称不得包含gs://
或任何其他协议前缀。例如,如果Firebase 控制台中显示的存储桶 URL 是gs://bucket-name.appspot.com
,则将字符串bucket-name.appspot.com
传递给 Admin SDK。
节点.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.
爪哇
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.
去
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 存储桶,您可以检索对自定义存储桶的引用,如下所示:
节点.js
const bucket = getStorage().bucket('my-custom-bucket');
爪哇
Bucket bucket = StorageClient.getInstance().bucket("my-custom-bucket");
Python
bucket = storage.bucket('my-custom-bucket')
去
bucket, err := client.Bucket("my-custom-bucket")
使用自定义 Firebase 应用
如果您正在构建一个与多个 Firebase 应用程序交互的更复杂的应用程序,您可以访问与特定 Firebase 应用程序关联的 Cloud Storage 存储桶,如下所示:
节点.js
const bucket = getStorage(customApp).bucket();
爪哇
Bucket bucket = StorageClient.getInstance(customApp).bucket();
Python
bucket = storage.bucket(app=custom_app)
去
otherClient, err := otherApp.Storage(context.Background())
bucket, err := otherClient.Bucket("other-app-bucket")
Google Cloud Storage 客户端库
Firebase Admin SDK 依赖于Google Cloud Storage 客户端库来提供 Cloud Storage 访问。 Admin SDK 返回的存储桶引用是这些库中定义的对象。请参阅 Google Cloud Storage 客户端库的文档和 API 参考,了解如何在文件上传和下载等用例中使用返回的存储桶引用。