Catch up on everthing we announced at this year's Firebase Summit. Learn more

Cloud Storage-Trigger

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 Sie auf Ereignisattribute zugreifen, eine Datei in eine Cloud Functions-Instanz herunterladen und andere Grundlagen zum Umgang mit Cloud Storage-Ereignissen.

Weitere Beispiele für Anwendungsfälle finden Was kann ich mit Cloud - Funktionen zu tun?

Eine Funktion bei Cloud Storage-Änderungen auslösen

Verwenden Sie functions.storage eine Funktion , die Griffe Cloud Storage Ereignisse zu erstellen. 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:

Das Beispiel für den Thumbnail-Generator ist beispielsweise 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 nur gesendet , wenn ein Eimer aktiviert hat Objekt Versionierung . 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 gesendet , wenn ein Objekt dauerhaft gelöscht wurde. Dazu gehören Objekte , die überschrieben werden oder als Teil der Schaufel des gelöschten Lifecycle - Konfiguration . Für Eimer mit Objektversionierung aktiviert ist , wird dies nicht gesendet , wenn ein Objekt archiviert wird (siehe onArchive ), auch wenn Archivierung über das auftritt storage.objects.delete Verfahren.
  • onFinalize gesendet , wenn ein neues Objekt (oder eine neue Generation eines bestehendes Objekt) wird erfolgreich in der Schaufel angelegt. Dazu gehört das Kopieren oder Umschreiben eines bestehenden Objekts. Ein fehlgeschlagener Upload löst dieses Ereignis nicht aus.
  • onMetadataUpdate gesendet , wenn die Metadaten eines vorhandenen Objekts ändert.

Stellen Sie das Ereignis innerhalb der on Event - Handler , wie oben für gezeigt onFinalize .

Auf Cloud Storage-Objektattribute zugreifen

Cloud - Funktionen setzen eine Reihe von Cloud Storage Objektattributen wie size und contentType für die Datei aktualisiert. Die ‚metageneration‘ Attribut erhöht wird , wenn es eine Änderung an den Metadaten des Objekts. Für neu erstellte Objekte der metageneration ist Wert 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 Thumbnail-Generierung verwendet einige dieser Attribute, um Exit-Fälle zu erkennen, in denen die Funktion zurückgibt:

// 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, wandeln Sie sie um 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 ganz einfach herunterladen und erneute Upload Objekte zu Cloud Storage, installieren Sie das Google Cloud Storage - npm install --save @google-cloud/storage Paket mit npm install --save @google-cloud/storage , und es importieren. So verwenden Versprechen JavaScript externe Prozesse wie die Thumbnail - Verarbeitungsaufgaben in der Probe zu behandeln, auch Import 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 gcs.bucket.file(filePath).download auf Ihrer Cloud - Funktionen Beispiel eine Datei in ein temporäres Verzeichnis herunter zu laden. An diesem Speicherort können Sie die Datei nach Bedarf verarbeiten und dann in Cloud Storage hochladen. Wenn Sie asynchrone Aufgaben ausführen, stellen Sie sicher, dass Sie in Ihrem Rückruf ein JavaScript-Versprechen zurückgeben.

Beispiel: Bildtransformation

Cloud - Funktionen stellen ein Bildverarbeitungsprogramm namens ImageMagick , die Manipulationen an grafischen Bilddateien ausführen kann. Im Folgenden finden Sie ein Beispiel für das 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 Kommandozeilen - Programm convert ein 200x200 Miniaturbild für das Bild in einem temporären Verzeichnis gespeichert zu erstellen, lädt es dann zu Cloud Storage zurück.

Entdecken Sie weitere Beispiele

Weitere Beispiele für gemeinsame Funktionen Medien Transformation einschließlich Bildern Umcodieren , Inhalt moderierte , Extrahieren EXIF - Metadaten . Die vollständige Liste der Beispiele ist auf GitHub verfügbar.

Die gesamte Google Cloud Storage - Trigger - Dokumentation für weitere Informationen.