Cloud Storage for Firebase хранит ваши данные в контейнере Google Cloud Storage — решении для хранения объектов эксабайтного масштаба с высокой доступностью и глобальной избыточностью. Firebase Admin SDK позволяет вам напрямую обращаться к контейнерам Cloud Storage из привилегированных сред. После этого вы сможете использовать API Google Cloud Storage для управления объектами, хранящимися в контейнерах.
Admin SDK также позволяет создавать общие URL-адреса, чтобы пользователи могли загружать объекты в ваши контейнеры.
Также убедитесь, что ваш проект Firebase работает по тарифному плану Blaze с оплатой по мере использования . Это требование действует с октября 2024 года (см. раздел «Часто задаваемые вопросы» ). Если вы новичок в Firebase и Google Cloud, проверьте, можете ли вы получить кредит в размере 300 долларов США .
Использовать контейнер по умолчанию
При инициализации 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