Introducción a la API de administrador de Cloud Storage

Cloud Storage para Firebase almacena tus datos en un bucket de Google Cloud Storage, una solución de almacenamiento de objetos en escala de exabytes con alta disponibilidad y redundancia global. El SDK de Firebase Admin te permite acceder directamente a tus buckets de Cloud Storage desde entornos con privilegios. Puedes utilizar las APIs de Google Cloud Storage para manipular los objetos almacenados en los buckets.

El SDK de Admin también te permite crear URLs que se pueden compartir para que los usuarios puedan descargar objetos en tus buckets.

Usa un bucket predeterminado

Cuando inicialices el SDK de Admin, puedes especificar el nombre de un bucket predeterminado. Luego, puedes recuperar una referencia autenticada a este depósito. El nombre del bucket no debe contener gs:// ni ningún prefijo de protocolo. Por ejemplo, si la URL del bucket que se muestra en Firebase console es gs://bucket-name.appspot.com, pasa la string bucket-name.appspot.com al SDK de Admin.

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': '<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.

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.

Puedes utilizar las referencias de buckets obtenidas del SDK de Admin, junto con las bibliotecas cliente oficiales de Google Cloud Storage, para subir, descargar y modificar contenido en los buckets asociados a tus proyectos de Firebase. Ten en cuenta que no es necesario autenticar las bibliotecas de Google Cloud Storage cuando usas el SDK de Firebase Admin. Las referencias de bucket que muestra el SDK de Admin ya están autenticadas con las credenciales que usaste para inicializar la app de Firebase.

Usa buckets personalizados

Si deseas utilizar un bucket de Cloud Storage distinto del predeterminado que se describió anteriormente o utilizar varios buckets de Cloud Storage en una sola app, puedes recuperar una referencia de un bucket personalizado como se muestra a continuación:

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")

Usa una app de Firebase personalizada

Si estás creando una aplicación más compleja que interactúa con varias apps de Firebase, puedes acceder a los buckets de Cloud Storage asociados con una app de Firebase específica de la siguiente manera:

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")

Obtén una URL de descarga para compartir

Puedes usar el SDK de Admin a fin de generar una URL de descarga que no venza para los archivos almacenados en tus buckets. Cualquier persona que tenga esta URL puede acceder al archivo de forma permanente.

Node.js

const { getStorage, getDownloadURL } = require('firebase-admin/storage');

const fileRef = getStorage().bucket('my-bucket').file('my-file');
const downloadURL= await getDownloadURL(fileRef);

Bibliotecas cliente de Google Cloud Storage

Los SDK de Firebase Admin dependen de las bibliotecas cliente de Google Cloud Storage para proporcionar el acceso a Cloud Storage. Las referencias de los buckets obtenidas del SDK de Admin son objetos definidos en estas bibliotecas. Consulta la documentación y las referencias de la API de las bibliotecas cliente de Google Cloud Storage para aprender a usar las referencias de buckets en casos de uso como la carga y descarga de archivos.