Cloud Storage-Trigger


Sie können eine Funktion als Reaktion auf das Hochladen, Aktualisieren oder von Dateien und Ordnern in Cloud Storage werden gelöscht.

Die Beispiele auf dieser Seite basieren auf einer Beispielfunktion, die ausgelöst wird, wenn Dateien werden in Cloud Storage hochgeladen. In dieser Beispielfunktion wird gezeigt, wie Sie auf Ereignisattribute zugreifen, eine Datei in eine Cloud Functions-Instanz herunterladen und wie Sie Cloud Storage-Ereignisse allgemein verarbeiten.

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

Funktion bei Änderungen an Cloud Storage auslösen

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

Im Beispiel für den Miniaturansichtsgenerator ist der Standard-Bucket für das Projekt festgelegt:

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

Cloud Storage unterstützt diese Ereignisse:

  • onArchive Wird nur gesendet, wenn für einen Bucket die Objektversionsverwaltung aktiviert ist. Dieses Ereignis bedeutet, dass die Live-Version eines Objekts zu einer archivierten Version geworden ist, weil sie entweder archiviert oder durch den Upload eines Objekts mit dem gleichen Namen überschrieben wurde.
  • onDelete Wird gesendet, wenn ein Objekt endgültig gelöscht wurde. Dies gilt auch für Objekte, die im Rahmen der Lebenszykluskonfiguration des Buckets überschrieben oder gelöscht werden. Bei Buckets mit aktivierter Objektversionsverwaltung wird dieses Ereignis nicht gesendet, wenn ein Objekt archiviert wird (siehe onArchive). Dies gilt auch, wenn die Archivierung über die Methode storage.objects.delete erfolgt.
  • onFinalize Wird gesendet, wenn ein neues Objekt (oder eine neue Generation eines vorhandenen Objekts) im Bucket erfolgreich erstellt wurde. Dazu gehört auch das Kopieren oder Neuschreiben eines bestehenden 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 im Ereignis-Handler on wie oben für onFinalize fest.

Auf Cloud Storage-Objektattribute zugreifen

Cloud Functions stellt eine Reihe von Cloud Storage-Objektattributen zur Verfügung, darunter: als size und contentType für die aktualisierte Datei. Das Attribut metageneration wird jedes Mal erhöht, wenn sich die Metadaten des Objekts ändern. Bei neuen Objekten lautet der metageneration-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.

Im Beispiel für die Erstellung von Miniaturansichten werden einige dieser Attribute verwendet, um Ausstiegsfälle zu erkennen, bei denen die Funktion Folgendes 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.');
}

Datei herunterladen, umwandeln und hochladen

In einigen Fällen ist es möglicherweise nicht erforderlich, Dateien von Cloud Storage herunterzuladen. Für intensive Aufgaben wie das Generieren eines Miniaturansicht aus einer in Cloud Storage gespeicherten Datei, die Sie herunterladen müssen an die Funktionsinstanz, d. h. die virtuelle Maschine, Ihren Code.

Um Objekte einfach in Cloud Storage herunter- und wieder hochzuladen, Google Cloud Storage Paket mit npm install --save @google-cloud/storage und importieren Sie sie. So verwenden Sie JavaScript verspricht externe Prozesse wie die Verarbeitung von Thumbnails im Beispiel importieren, auch child-process-promise importieren:

const functions = require('firebase-functions/v1');
const admin = require('firebase-admin');
admin.initializeApp()
const path = require('path');

//library for resizing images
const sharp = require('sharp');

gcs.bucket.file(filePath).download verwenden, um eine temporäre Datei herunterzuladen auf der Instanz Cloud Functions. Hier können Sie Folgendes tun: die Datei nach Bedarf verarbeiten und dann in Cloud Storage hochladen. Wann? Asynchrone Aufgaben ausführen, achten Sie darauf, dass Sie ein JavaScript-Promise in Ihrem Callback des Nutzers an.

Beispiel: Bildtransformation

Die Verwendung von Cloud Functions in Verbindung mit Bildverarbeitungsprogrammen wie Mit sharp können Sie Manipulationen an grafischen Bilddateien. Im Folgenden findest du ein Beispiel für die Erstellung eines Thumbnails für eine hochgeladene Bilddatei:

// Download file from bucket.
const bucket = admin.storage().bucket(fileBucket);
const metadata = {
  contentType: contentType,
};
const downloadResponse = await bucket.file(filePath).download();
const imageBuffer = downloadResponse[0];
functions.logger.log("Image downloaded!");

// Generate a thumbnail using sharp.
const thumbnailBuffer = await sharp(imageBuffer).resize({
  width: 200,
  height: 200,
  withoutEnlargement: true,
}).toBuffer();
functions.logger.log("Thumbnail created");

// Upload the thumbnail with a 'thumb_' prefix.
const thumbFileName = `thumb_${fileName}`;
const thumbFilePath = path.join(path.dirname(filePath), thumbFileName);
await bucket.file(thumbFilePath).save(thumbnailBuffer, {
  metadata: metadata,
});
return functions.logger.log("Thumbnail uploaded!");

Mit diesem Code wird ein eine Miniaturansicht von 200 x 200 für das Bild, das in einem temporären Verzeichnis gespeichert ist, und lädt es dann hoch. Zurück zu Cloud Storage.

Weitere Beispiele

Weitere Beispiele für gängige Funktionen zur Medientransformation sind Transcodierung von Bildern, Moderation von Inhalten und Extraktion von EXIF-Metadaten. Die vollständige Liste der Beispiele finden Sie unter die auf GitHub verfügbar sind.