Einführung in die Admin Cloud Storage API

Cloud Storage for Firebase speichert Ihre Daten in einem Google Cloud Storage-Bucket. Das ist eine Objektspeicherlösung im Exabyte-Bereich mit hoher Verfügbarkeit und globaler Redundanz. Mit dem Firebase Admin SDK können Sie direkt aus privilegierten Umgebungen auf Ihre Cloud Storage Buckets zugreifen. Anschließend können Sie mit den Google Cloud Storage APIs die in den Buckets gespeicherten Objekte bearbeiten.

Mit dem Admin SDK können Sie auch freigegebene URLs erstellen, damit Nutzer Objekte in Ihren Buckets herunterladen können.

Außerdem muss für Ihr Firebase-Projekt der Blaze-Tarif (Pay as you go) aktiviert sein. Diese Anforderung gilt seit Oktober 2024 (siehe FAQs). Wenn Sie Firebase und Google Cloud noch nicht kennen, prüfen Sie, ob Sie Anspruch auf ein Guthaben von 300$ haben.

Standard-Bucket verwenden

Sie können beim Initialisieren des Admin SDK einen Standard-Bucket-Namen angeben. Anschließend können Sie einen authentifizierten Verweis auf diesen Bucket abrufen.

Der Bucket-Name darf nicht gs:// oder andere Protokollpräfixe enthalten. Wenn die in der Firebase Konsole angezeigte Bucket-URL gs://PROJECT_ID.firebasestorage.app lautet, übergeben Sie den String PROJECT_ID.firebasestorage.app an das 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.

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 https://cloud.google.com/java/docs/reference/google-cloud-storage/latest/com.google.cloud.storage.Bucket
// 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.

Sie können die vom Admin SDK zurückgegebenen Bucket-Verweise in Verbindung mit den offiziellen Google Cloud Storage Clientbibliotheken verwenden, um Inhalte in den mit Ihren Firebase-Projekten verknüpften Buckets hochzuladen, herunterzuladen und zu ändern. Sie müssen die Google Cloud Storage Bibliotheken nicht authentifizieren, wenn Sie das Firebase Admin SDK verwenden. Die vom Admin SDK zurückgegebenen Bucket-Verweise sind bereits mit den Anmeldedaten authentifiziert, die zum Initialisieren Ihrer Firebase-App verwendet wurden.

Benutzerdefinierte Buckets verwenden

Wenn Sie einen Cloud Storage Bucket verwenden möchten, der nicht der in dieser Anleitung beschriebene Standard-Bucket ist, oder mehrere Cloud Storage Buckets in einer einzelnen App verwenden möchten, können Sie einen Verweis auf einen benutzerdefinierten Bucket abrufen:

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

Benutzerdefinierte Firebase-App verwenden

Wenn Sie eine komplexere Anwendung entwickeln, die mit mehreren Firebase-Appsinteragiert, können Sie so auf die Cloud Storage Buckets zugreifen, die mit einer bestimmten Firebase-App verknüpft sind:

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

Freigegebene Download-URL abrufen

Mit dem Admin SDK können Sie eine Download-URL ohne Ablaufdatum für Dateien generieren, die in Ihren Buckets gespeichert sind. Jeder, der diese URL hat, kann dauerhaft auf die Datei zugreifen.

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 Clientbibliotheken

Die Firebase Admin SDKs sind von den Google Cloud Storage Clientbibliotheken abhängig, um Cloud Storage Zugriff zu ermöglichen. Die vom Admin SDK zurückgegebenen Bucket-Verweise sind Objekte, die in diesen Bibliotheken definiert sind. In der Dokumentation und den API-Referenzen der Google Cloud Storage Clientbibliotheken erfahren Sie, wie Sie die zurückgegebenen Bucket-Verweise in Anwendungsfällen wie dem Hoch- laden und Herunterladen von Dateien verwenden.