Admin Cloud Storage API 简介

Cloud Storage for Firebase 可将您的数据存储在 Google Cloud Storage 存储桶中,这是一种 EB 级对象存储解决方案,不仅可用性高,还能实现全局冗余。借助 Firebase Admin SDK,您可以从特权环境直接访问 Cloud Storage 存储桶。然后可以使用 Google Cloud Storage API 来操控存储桶中存储的对象。

Admin SDK 还支持创建可共享的网址,以便用户下载您的存储桶中的对象。

使用默认存储桶

您可以在初始化 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 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 参考文档,了解如何在文件上传下载等使用场景中使用返回的存储桶引用。