Introdução à API Admin Cloud Storage

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

O SDK Admin também permite criar URLs compartilháveis para que os usuários possam fazer o download de objetos nos seus 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://bucket-name.appspot.com, transmita a string bucket-name.appspot.com 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': '<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.

Você pode usar as referências do bucket retornadas pelo SDK Admin em conjunto com as bibliotecas de cliente do Google Cloud Storage oficiais para fazer download, 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 do Cloud Storage diferente do padrão fornecido acima ou utilizar vários buckets do Cloud Storage em um único app, é possível recuperar uma referência a um bucket personalizado, conforme mostrado no exemplo a seguir:

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

Se você estiver criando um aplicativo mais complicado que interage com vários apps do Firebase, use os comandos abaixo para acessar os buckets do Cloud Storage associados a um app específico do Firebase:

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 SDK Admin para gerar um URL de download que não expira para arquivos armazenados nos seus 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 as referências de documentação e de API das bibliotecas de cliente do Google Cloud Storage para saber como usar as referências de bucket retornadas em casos de uso, como para fazer o download e upload de um arquivo.