Déclencheurs Cloud Storage

Vous pouvez déclencher une fonction en réponse au téléchargement, à la mise à jour ou à la suppression de fichiers et de dossiers dans Cloud Storage.

Les exemples de cette page sont basés sur un exemple de fonction qui se déclenche lorsque des fichiers image sont importés dans Cloud Storage. Cet exemple de fonction montre comment accéder aux attributs d'événement, comment télécharger un fichier sur une instance Cloud Functions et d'autres principes fondamentaux de la gestion des événements Cloud Storage.

Pour plus d' exemples de cas d'utilisation, voir Que puis - je faire avec les fonctions Cloud?

Déclencher une fonction sur les modifications apportées à Cloud Storage

Utilisez functions.storage pour créer une fonction qui gère les événements Cloud Storage. Selon que vous souhaitiez étendre votre fonction à un bucket Cloud Storage spécifique ou utiliser le bucket par défaut, utilisez l'un des éléments suivants :

Par exemple, l'exemple de générateur de miniatures est limité au bucket par défaut du projet :

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

Cloud Storage est compatible avec les événements suivants :

  • onArchive seulement envoyé quand un seau a permis objet versioning . Cet événement indique que la version active d'un objet est devenue une version archivée, soit parce qu'elle a été archivée, soit parce qu'elle a été écrasée par le téléchargement d'un objet du même nom.
  • onDelete envoyé quand un objet a été supprimé de façon permanente. Cela inclut les objets qui sont remplacés ou supprimés dans le cadre de l'seau configuration du cycle de vie . Pour des seaux avec objet versioning activé, ce n'est pas envoyé lorsqu'un objet est archivé (voir onArchive ), même si se produit d' archivage via la storage.objects.delete méthode.
  • onFinalize envoyé lorsqu'un nouvel objet (ou d' une nouvelle génération d'un objet existant) est créé avec succès dans le seau. Cela inclut la copie ou la réécriture d'un objet existant. Un échec de téléchargement ne déclenche pas cet événement.
  • onMetadataUpdate Sent lorsque les métadonnées d'un objet change existants.

Définir l'événement dans le on gestionnaire d'événements comme indiqué ci - dessus pour onFinalize .

Accéder aux attributs de l'objet Cloud Storage

Fonctions Cloud présente un certain nombre d'objets Cloud Storage attributs tels que la size et contentType pour le fichier mis à jour. Le « metageneration » attribut est incrémenté chaque fois qu'il ya un changement dans les métadonnées de l'objet. Pour les nouveaux objets, la metageneration valeur est 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.

L'exemple de génération de vignettes utilise certains de ces attributs pour détecter les cas de sortie dans lesquels la fonction renvoie :

// 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.');
}

Télécharger, transformer et charger un fichier

Dans certains cas, il peut ne pas être nécessaire de télécharger des fichiers depuis Cloud Storage. Cependant, pour effectuer des tâches intensives telles que la génération d'une image miniature à partir d'un fichier stocké dans Cloud Storage, vous devez télécharger des fichiers sur l'instance de fonctions, c'est-à-dire la machine virtuelle qui exécute votre code.

Pour télécharger facilement et objets retélécharger Cloud Storage, installez le package Google Cloud Storage en utilisant npm install --save @google-cloud/storage et l' importer. Pour utiliser des promesses JavaScript pour gérer les processus externes comme les tâches de traitement des vignettes dans l'échantillon, aussi l' importation 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');

Utilisez gcs.bucket.file(filePath).download télécharger un fichier dans un répertoire temporaire sur votre instance Fonctions Cloud. À cet emplacement, vous pouvez traiter le fichier selon vos besoins, puis le télécharger dans Cloud Storage. Lorsque vous effectuez des tâches asynchrones, assurez-vous de renvoyer une promesse JavaScript dans votre rappel.

Exemple : transformation d'image

Fonctions Cloud offre un programme de traitement de l' image appelé ImageMagick qui peut effectuer des manipulations sur les fichiers d'images graphiques. Voici un exemple de création d'une image miniature pour un fichier image téléchargé :

// 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);

Ce code exécute le ImageMagick programme de ligne de commande convert pour créer une vignette 200x200 pour l'image enregistrée dans un répertoire temporaire, puis télécharge revenir à Cloud Storage.

Explorer plus d'exemples

D' autres exemples de fonctions de transformation des médias communs , y compris transcoder des images , Modération de contenu , l' extraction des métadonnées EXIF . La liste complète des exemples est disponible sur GitHub.

Voir la pleine trigger Google Cloud Storage documentation pour plus d' informations.