Введение в API административного облачного хранилища

Cloud Storage for Firebase хранит ваши данные в контейнере Google Cloud Storage — решении для хранения объектов в масштабе экзабайта с высокой доступностью и глобальной избыточностью. Firebase Admin SDK позволяет вам напрямую получать доступ к контейнерам Cloud Storage из привилегированных сред. Затем вы можете использовать API Google Cloud Storage для управления объектами, хранящимися в контейнерах.

Admin SDK также позволяет создавать общие URL-адреса, чтобы пользователи могли загружать объекты в ваши корзины.

Использовать контейнер по умолчанию

Вы можете указать имя контейнера по умолчанию при инициализации Admin SDK. Затем вы можете получить аутентифицированную ссылку на этот контейнер.

Имя контейнера не должно содержать gs:// или любые другие префиксы протокола. Например, если URL контейнера, отображаемый в консоли 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.

Ява

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.

Питон

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.

Идти

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. Обратите внимание, что вам не нужно аутентифицировать библиотеки Google Cloud Storage при использовании Firebase Admin SDK. Ссылки на контейнеры, возвращаемые Admin SDK, уже аутентифицированы с использованием учетных данных, используемых для инициализации вашего приложения Firebase.

Используйте пользовательские ведра

Если вы хотите использовать контейнер Cloud Storage отличный от контейнера по умолчанию, описанного ранее в этом руководстве, или использовать несколько контейнеров Cloud Storage в одном приложении, вы можете получить ссылку на пользовательский контейнер:

Node.js

const bucket = getStorage().bucket('my-custom-bucket');

Ява

Bucket bucket = StorageClient.getInstance().bucket("my-custom-bucket");

Питон

bucket = storage.bucket('my-custom-bucket')

Идти

 bucket, err := client.Bucket("my-custom-bucket")

Используйте пользовательское приложение Firebase

Если вы создаете более сложное приложение, взаимодействующее с несколькими приложениями Firebase , вы можете получить доступ к контейнерам Cloud Storage , связанным с определенным приложением Firebase, следующим образом:

Node.js

const bucket = getStorage(customApp).bucket();

Ява

Bucket bucket = StorageClient.getInstance(customApp).bucket();

Питон

bucket = storage.bucket(app=custom_app)

Идти

otherClient, err := otherApp.Storage(context.Background())
bucket, err := otherClient.Bucket("other-app-bucket")

Получите общий URL для загрузки

Вы можете использовать Admin SDK для генерации неистекающего URL для загрузки файлов, хранящихся в ваших бакетах. Любой, у кого есть этот URL, может получить постоянный доступ к файлу.

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, являются объектами, определенными в этих библиотеках. Обратитесь к документации и ссылкам API клиентских библиотек Google Cloud Storage чтобы узнать, как использовать возвращаемые ссылки на контейнеры в таких случаях использования, как загрузка и скачивание файлов.