Firebase is back at Google I/O on May 10! Register now

Cloud Storage-Trigger

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

Sie können eine Funktion als Reaktion auf das Hochladen, Aktualisieren oder Löschen von Dateien und Ordnern in Cloud Storage auslösen.

Die Beispiele auf dieser Seite basieren auf einer Beispielfunktion, die ausgelöst wird, wenn Bilddateien in Cloud Storage hochgeladen werden. Diese Beispielfunktion zeigt, wie auf Ereignisattribute zugegriffen wird, wie eine Datei in eine Cloud Functions-Instanz heruntergeladen wird und andere Grundlagen der Verarbeitung von Cloud Storage-Ereignissen.

Weitere Beispiele für Anwendungsfälle finden Sie unter Was kann ich mit Cloud Functions tun?

Lösen Sie eine Funktion bei Cloud Storage-Änderungen aus

Verwenden Sie functions.storage um eine Funktion zu erstellen, die Cloud Storage-Ereignisse verarbeitet. Je nachdem, ob Sie Ihre Funktion auf einen bestimmten Cloud Storage-Bucket beschränken oder den Standard-Bucket verwenden möchten, verwenden Sie eine der folgenden Möglichkeiten:

Beispielsweise ist das Beispiel des Thumbnail-Generators auf den Standard-Bucket für das Projekt beschränkt:

exports.generateThumbnail = functions.storage.object().onFinalize(async (object) => {
  // ...
});

Cloud Storage unterstützt diese Ereignisse:

  • onArchive Wird nur gesendet, wenn ein Bucket die Objektversionierung aktiviert hat. Dieses Ereignis zeigt an, dass die Live-Version eines Objekts zu einer archivierten Version geworden ist, entweder weil sie archiviert wurde oder weil sie durch das Hochladen eines gleichnamigen Objekts überschrieben wurde.
  • onDelete Wird gesendet, wenn ein Objekt dauerhaft gelöscht wurde. Dazu gehören Objekte, die im Rahmen der Lebenszykluskonfiguration des Buckets überschrieben oder gelöscht werden . Für Buckets mit aktivierter Objektversionierung wird dies nicht gesendet, wenn ein Objekt archiviert wird (siehe onArchive ), selbst wenn die Archivierung über die Methode storage.objects.delete erfolgt.
  • onFinalize Wird gesendet, wenn ein neues Objekt (oder eine neue Generation eines vorhandenen Objekts) erfolgreich im Bucket erstellt wurde. Dazu gehört das Kopieren oder Umschreiben eines vorhandenen Objekts. Ein fehlgeschlagener Upload löst dieses Ereignis nicht aus.
  • onMetadataUpdate Wird gesendet, wenn sich die Metadaten eines vorhandenen Objekts ändern.

Legen Sie das Ereignis innerhalb des on -Ereignishandlers fest, wie oben für onFinalize gezeigt.

Greifen Sie auf Cloud Storage-Objektattribute zu

Cloud Functions stellt eine Reihe von Cloud Storage-Objektattributen wie size und contentType für die aktualisierte Datei bereit. Das Attribut „metageneration“ wird bei jeder Änderung der Metadaten des Objekts inkrementiert. Für neue Objekte ist der metageneration 1 .

const fileBucket = object.bucket; // The Storage bucket that contains the file.
const filePath = object.name; // File path in the bucket.
const contentType = object.contentType; // File content type.
const metageneration = object.metageneration; // Number of times metadata has been generated. New objects have a value of 1.

Das Beispiel für die Generierung von Miniaturansichten verwendet einige dieser Attribute, um Exit-Fälle zu erkennen, in denen die Funktion zurückkehrt:

// Exit if this is triggered on a file that is not an image.
if (!contentType.startsWith('image/')) {
  return functions.logger.log('This is not an image.');
}

// Get the file name.
const fileName = path.basename(filePath);
// Exit if the image is already a thumbnail.
if (fileName.startsWith('thumb_')) {
  return functions.logger.log('Already a Thumbnail.');
}

Laden Sie eine Datei herunter, transformieren Sie sie und laden Sie sie hoch

In einigen Fällen ist es möglicherweise nicht erforderlich, Dateien aus Cloud Storage herunterzuladen. Um jedoch intensive Aufgaben wie das Generieren eines Miniaturbilds aus einer in Cloud Storage gespeicherten Datei auszuführen, müssen Sie Dateien in die Funktionsinstanz herunterladen – d. h. die virtuelle Maschine, auf der Ihr Code ausgeführt wird.

Um Objekte einfach herunterzuladen und erneut in Cloud Storage hochzuladen, installieren Sie das Google Cloud Storage-Paket mit npm install --save @google-cloud/storage und importieren Sie es. Um JavaScript-Promises zu verwenden, um externe Prozesse wie die Thumbnail-Verarbeitungsaufgaben im Beispiel zu verarbeiten, importieren Sie auch child-process-promise :

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp()
const spawn = require('child-process-promise').spawn;
const path = require('path');
const os = require('os');
const fs = require('fs');

Verwenden Sie gcs.bucket.file(filePath).download um eine Datei in ein temporäres Verzeichnis auf Ihrer Cloud Functions-Instanz herunterzuladen. An diesem Ort können Sie die Datei nach Bedarf verarbeiten und dann in Cloud Storage hochladen. Stellen Sie beim Ausführen asynchroner Aufgaben sicher, dass Sie in Ihrem Rückruf ein JavaScript-Promise zurückgeben.

Beispiel: Bildtransformation

Cloud Functions bietet ein Bildverarbeitungsprogramm namens ImageMagick , das Manipulationen an grafischen Bilddateien vornehmen kann. Im Folgenden finden Sie ein Beispiel zum Erstellen eines Miniaturbilds für eine hochgeladene Bilddatei:

// Download file from bucket.
const bucket = admin.storage().bucket(fileBucket);
const tempFilePath = path.join(os.tmpdir(), fileName);
const metadata = {
  contentType: contentType,
};
await bucket.file(filePath).download({destination: tempFilePath});
functions.logger.log('Image downloaded locally to', tempFilePath);
// Generate a thumbnail using ImageMagick.
await spawn('convert', [tempFilePath, '-thumbnail', '200x200>', tempFilePath]);
functions.logger.log('Thumbnail created at', tempFilePath);
// We add a 'thumb_' prefix to thumbnails file name. That's where we'll upload the thumbnail.
const thumbFileName = `thumb_${fileName}`;
const thumbFilePath = path.join(path.dirname(filePath), thumbFileName);
// Uploading the thumbnail.
await bucket.upload(tempFilePath, {
  destination: thumbFilePath,
  metadata: metadata,
});
// Once the thumbnail has been uploaded delete the local file to free up disk space.
return fs.unlinkSync(tempFilePath);

Dieser Code führt das ImageMagick Befehlszeilenprogramm convert aus, um ein 200 x 200-Miniaturbild für das in einem temporären Verzeichnis gespeicherte Bild zu erstellen, und lädt es dann zurück in Cloud Storage hoch.

Entdecken Sie weitere Beispiele

Weitere Beispiele für gängige Medientransformationsfunktionen, darunter das Transkodieren von Bildern , das Moderieren von Inhalten und das Extrahieren von EXIF-Metadaten . Die vollständige Liste der Beispiele ist auf GitHub verfügbar.

Weitere Informationen finden Sie in der vollständigen Dokumentation zum Google Cloud Storage-Trigger.