Google is committed to advancing racial equity for Black communities. See how.
Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Cloud-Speicher wird ausgelöst

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

Beispiele auf dieser Seite basieren auf einer Beispielfunktion, die ausgelöst wird, wenn Bilddateien in den Cloud-Speicher hochgeladen werden. Diese Beispielfunktion zeigt, wie Sie auf Ereignisattribute zugreifen, eine Datei in eine Cloud Functions-Instanz herunterladen und andere Grundlagen für die Behandlung von Cloud Storage-Ereignissen.

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

Lösen Sie eine Funktion für Cloud-Speicheränderungen aus

Verwenden Sie functions.storage , um eine functions.storage zu erstellen, die Cloud-Speicherereignisse verarbeitet. Verwenden Sie eine der folgenden Optionen, je nachdem, ob Sie Ihre Funktion auf einen bestimmten Cloud-Speicher-Bucket oder den Standard-Bucket erweitern möchten:

Das Beispiel für den Miniaturbildgenerator ist beispielsweise auf den Standardbereich für das Projekt festgelegt:

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

Cloud Storage unterstützt folgende Ereignisse:

  • onArchive 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 gesendet, wenn ein Objekt dauerhaft gelöscht wurde. Dies schließt Objekte ein, die im Rahmen der Lebenszykluskonfiguration des Buckets überschrieben oder gelöscht werden. 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 vorhandenen Objekts) erfolgreich im Bucket erstellt wurde. Dies umfasst das Kopieren oder Umschreiben eines vorhandenen Objekts. Ein fehlgeschlagener Upload löst dieses Ereignis nicht aus.
  • onMetadataUpdate gesendet, wenn sich die Metadaten eines vorhandenen Objekts ändern.

onFinalize Sie das Ereignis im on event-Handler fest, wie oben für onFinalize .

Zugriff auf Speicherobjektattribute

Cloud-Funktionen machen eine Reihe von Speicherobjektattributen wie size und contentType für die aktualisierte Datei verfügbar. Das Attribut 'Metageneration' wird erhöht, wenn Änderungen an den Metadaten des Objekts vorgenommen werden. Für neue Objekte beträgt 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 Erstellung von Miniaturansichten 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 console.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 console.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 dem Cloud-Speicher herunterzuladen. Um jedoch intensive Aufgaben wie das Generieren eines Miniaturbilds aus einer im Cloud-Speicher gespeicherten Datei auszuführen, müssen Sie Dateien auf die Funktionsinstanz herunterladen, dh auf die virtuelle Maschine, auf der Ihr Code ausgeführt wird.

Um Objekte einfach in den Cloud-Speicher herunterzuladen und erneut hochzuladen, installieren Sie das Google Cloud-Speicherpaket mit npm install --save @google-cloud/storage und importieren Sie es. 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 Sie gcs.bucket.file(filePath).download , um eine Datei in ein temporäres Verzeichnis auf Ihrer Cloud Functions-Instanz herunterzuladen. An diesem Speicherort können Sie die Datei nach Bedarf verarbeiten und anschließend in den Cloud-Speicher hochladen. Stellen Sie beim Ausführen asynchroner Aufgaben sicher, dass Sie in Ihrem Rückruf ein JavaScript-Versprechen zurückgeben.

Beispiel: Bildtransformation

Cloud Functions bietet ein Bildverarbeitungsprogramm namens ImageMagick , mit dem grafische Bilddateien bearbeitet werden können. Das folgende Beispiel zeigt, wie Sie ein Miniaturbild für eine hochgeladene Bilddatei erstellen:

// 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});
console.log('Image downloaded locally to', tempFilePath);
// Generate a thumbnail using ImageMagick.
await spawn('convert', [tempFilePath, '-thumbnail', '200x200>', tempFilePath]);
console.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 die convert des ImageMagick Befehlszeilenprogramms aus convert um eine 200 x 200-Miniaturansicht für das in einem temporären Verzeichnis gespeicherte Bild zu erstellen, und lädt es dann wieder in den Cloud-Speicher hoch.

Weitere Beispiele finden Sie hier

Weitere Beispiele für gängige Medientransformationsfunktionen, einschließlich Transcodieren von Bildern , Moderieren von Inhalten und Extrahieren von EXIF-Metadaten . Die vollständige Liste der Beispiele finden Sie auf GitHub.

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