Introdução à API Admin Cloud Storage

O Cloud Storage for Firebase armazena seus dados em um bucket do Google Cloud Storage, uma solução de armazenamento de objetos em escala de exabytes com alta disponibilidade e redundância global. O SDK Admin do Firebase permite acessar diretamente os buckets do Cloud Storage de ambientes privilegiados. Então, é possível usar APIs do Google Cloud Storage para manipular os objetos armazenados nos buckets.

O Admin SDK também permite criar URLs compartilháveis para que os usuários possam baixar objetos nos buckets.

Usar um bucket padrão

Você pode especificar um nome de bucket padrão ao inicializar o SDK Admin. Com isso, é possível recuperar uma referência autenticada para esse bucket.

O nome do bucket não pode conter gs:// ou qualquer outro prefixo de protocolo. Por exemplo, se o URL do bucket exibido no console do Firebase for gs://PROJECT_ID.firebasestorage.app, transmita a string PROJECT_ID.firebasestorage.app ao SDK 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': '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.

É possível usar as referências do bucket retornadas pelo SDK Admin com as bibliotecas de cliente do Google Cloud Storage oficiais para baixar, fazer upload e modificar o conteúdo nos buckets associados aos projetos do Firebase. Não é necessário autenticar as bibliotecas do Google Cloud Storage ao usar o SDK Admin do Firebase. As referências de bucket retornadas pelo SDK Admin já foram autenticadas com as credenciais usadas para inicializar seu app do Firebase.

Usar buckets personalizados

Para usar um bucket Cloud Storage diferente do padrão descrito anteriormente neste guia ou vários buckets Cloud Storage em um único app, recupere uma referência a um bucket personalizado:

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

Usar um app do Firebase personalizado

Ao criar um app mais complicado que interage com vários apps do Firebase, é possível acessar os buckets Cloud Storage associados a um app específico do Firebase da seguinte maneira:

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

Gerar um URL de download compartilhável

É possível usar o Admin SDK para gerar um URL de download que não expira para arquivos armazenados nos buckets. Qualquer pessoa com esse URL pode acessar o arquivo permanentemente.

Node.js

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

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

Bibliotecas de cliente do Google Cloud Storage

Os SDKs Admin do Firebase dependem das bibliotecas de cliente do Google Cloud Storage para dar acesso ao Cloud Storage. As referências do bucket retornadas pelo SDK Admin são objetos definidos nessas bibliotecas. Consulte a documentação e as Referências de API das bibliotecas de cliente do Google Cloud Storage para saber como usar as referências de bucket retornadas em casos de uso, por exemplo, para upload e download de um arquivo.