Введение в 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 https://cloud.google.com/java/docs/reference/google-cloud-storage/latest/com.google.cloud.storage.Bucket
// 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. Обратите внимание, что при использовании Firebase Admin SDK аутентификация библиотек Google Cloud Storage не требуется. Ссылки на контейнеры, возвращаемые 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