Google is committed to advancing racial equity for Black communities. See how.
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Trigger di Cloud Storage

È possibile attivare una funzione in risposta al caricamento, all'aggiornamento o all'eliminazione di file e cartelle in Cloud Storage.

Gli esempi in questa pagina si basano su una funzione di esempio che viene attivata quando i file di immagine vengono caricati su Cloud Storage. Questa funzione di esempio mostra come accedere agli attributi degli eventi, come scaricare un file in un'istanza di Funzioni cloud e altri aspetti fondamentali della gestione degli eventi di Cloud Storage.

Per altri esempi di casi d'uso, vedi Cosa posso fare con le funzioni cloud?

Attiva una funzione sulle modifiche al Cloud Storage

Utilizzare functions.storage per creare una funzione che gestisca gli eventi di Cloud Storage. A seconda che si desideri estendere la propria funzione a uno specifico bucket di archiviazione cloud o utilizzare il bucket predefinito, utilizzare una delle seguenti opzioni:

Ad esempio, l'esempio del generatore di miniature è impostato sul bucket predefinito per il progetto:

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

Cloud Storage supporta questi eventi:

  • onArchive solo quando un bucket ha abilitato il controllo delle versioni degli oggetti . Questo evento indica che la versione live di un oggetto è diventata una versione archiviata, sia perché è stata archiviata sia perché è stata sovrascritta dal caricamento di un oggetto con lo stesso nome.
  • onDelete Inviato quando un oggetto è stato eliminato in modo permanente. Ciò include oggetti che vengono sovrascritti o eliminati come parte della configurazione del ciclo di vita del bucket. Per i bucket con il versioning degli oggetti abilitato, questo non viene inviato quando un oggetto viene archiviato (consultare onArchive ), anche se l'archiviazione avviene tramite il metodo storage.objects.delete .
  • onFinalize Inviato quando un nuovo oggetto (o una nuova generazione di un oggetto esistente) viene creato correttamente nel bucket. Ciò include la copia o la riscrittura di un oggetto esistente. Un caricamento non riuscito non attiva questo evento.
  • onMetadataUpdate Inviato quando i metadati di un oggetto esistente cambiano.

Impostare l'evento all'interno del gestore eventi on come mostrato sopra per onFinalize .

Accedi agli attributi dell'oggetto Storage

Funzioni cloud espone una serie di attributi di oggetti di archiviazione come size e contentType per il file aggiornato. L'attributo "metageneration" viene incrementato ogni volta che viene apportata una modifica ai metadati dell'oggetto. Per i nuovi oggetti, il valore di 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.

L'esempio di generazione delle miniature utilizza alcuni di questi attributi per rilevare i casi di uscita in cui la funzione restituisce:

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

Scarica, trasforma e carica un file

In alcuni casi, potrebbe non essere necessario scaricare file da Cloud Storage. Tuttavia, per eseguire attività intensive come la generazione di un'immagine in miniatura da un file archiviato in Cloud Storage, è necessario scaricare i file nell'istanza delle funzioni, ovvero la macchina virtuale che esegue il codice.

Per scaricare e ricaricare facilmente gli oggetti su Cloud Storage, installa il pacchetto Google Cloud Storage usando npm install --save @google-cloud/storage e importalo. Per utilizzare le promesse JavaScript per gestire processi esterni come le attività di elaborazione delle miniature nell'esempio, importare anche 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');

Utilizzare gcs.bucket.file(filePath).download per scaricare un file in una directory temporanea nell'istanza di Funzioni cloud. In questa posizione, è possibile elaborare il file secondo necessità e quindi caricarlo su Cloud Storage. Quando si eseguono attività asincrone, assicurarsi di restituire una promessa JavaScript nel callback.

Esempio: trasformazione dell'immagine

Cloud Functions fornisce un programma di elaborazione delle immagini chiamato ImageMagick che può eseguire manipolazioni su file di immagini grafiche. Di seguito è riportato un esempio di come creare un'immagine di anteprima per un file di immagine caricato:

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

Questo codice esegue la convert programma da riga di comando ImageMagick per creare una miniatura 200x200 per l'immagine salvata in una directory temporanea, quindi la carica nuovamente su Cloud Storage.

Esplora altri esempi

Altri esempi di funzioni comuni di trasformazione dei media, tra cui la transcodifica delle immagini , la moderazione dei contenuti , l' estrazione di metadati EXIF . L' elenco completo degli esempi è disponibile su GitHub.

Vedere la piena attivazione di Google Cloud Storage documentazione per ulteriori informazioni.