Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Acionadores do Cloud Storage

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Você pode acionar uma função em resposta ao upload, atualização ou exclusão de arquivos e pastas no Cloud Storage.

Os exemplos nesta página são baseados em uma função de amostra que é acionada quando os arquivos de imagem são enviados para o Cloud Storage. Esta função de amostra demonstra como acessar atributos de eventos, como fazer download de um arquivo para uma instância do Cloud Functions e outros fundamentos de manipulação de eventos do Cloud Storage.

Para mais exemplos de casos de uso, consulte O que posso fazer com o Cloud Functions?

Acionar uma função nas alterações do Cloud Storage

Use functions.storage para criar uma função que processe eventos do Cloud Storage. Dependendo se você deseja definir o escopo de sua função para um bucket específico do Cloud Storage ou usar o bucket padrão, use um dos seguintes:

Por exemplo, a amostra do gerador de miniaturas tem como escopo o bucket padrão do projeto:

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

O Cloud Storage é compatível com estes eventos:

  • onArchive apenas quando um bucket habilitou o controle de versão de objeto . Esse evento indica que a versão ativa de um objeto se tornou uma versão arquivada, porque foi arquivada ou porque foi substituída pelo upload de um objeto com o mesmo nome.
  • onDelete Enviado quando um objeto foi excluído permanentemente. Isso inclui objetos que são substituídos ou excluídos como parte da configuração do ciclo de vida do bucket . Para buckets com versionamento de objetos habilitado, isso não é enviado quando um objeto é arquivado (consulte onArchive ), mesmo que o arquivamento ocorra por meio do método storage.objects.delete .
  • onFinalize Enviado quando um novo objeto (ou uma nova geração de um objeto existente) é criado com sucesso no bucket. Isso inclui copiar ou reescrever um objeto existente. Um upload com falha não aciona esse evento.
  • onMetadataUpdate Enviado quando os metadados de um objeto existente são alterados.

Defina o evento no manipulador de eventos on conforme mostrado acima para onFinalize .

Acessar atributos de objeto do Cloud Storage

O Cloud Functions expõe vários atributos de objeto do Cloud Storage, como size e contentType , para o arquivo atualizado. O atributo 'metageração' é incrementado sempre que há uma alteração nos metadados do objeto. Para novos objetos, o valor de 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.

A amostra de geração de miniaturas usa alguns desses atributos para detectar casos de saída em que a função retorna:

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

Baixe, transforme e carregue um arquivo

Em alguns casos, pode não ser necessário fazer download de arquivos do Cloud Storage. No entanto, para realizar tarefas intensivas, como gerar uma imagem em miniatura de um arquivo armazenado no Cloud Storage, você precisa fazer download de arquivos para a instância de funções, ou seja, a máquina virtual que executa seu código.

Para baixar e reenviar objetos facilmente para o Cloud Storage, instale o pacote do Google Cloud Storage usando npm install --save @google-cloud/storage e importe-o. Para usar as promessas de JavaScript para lidar com processos externos, como as tarefas de processamento de miniaturas no exemplo, importe também 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');

Use gcs.bucket.file(filePath).download para fazer download de um arquivo para um diretório temporário em sua instância do Cloud Functions. Nesse local, você pode processar o arquivo conforme necessário e fazer upload para o Cloud Storage. Ao executar tarefas assíncronas, certifique-se de retornar uma promessa JavaScript em seu retorno de chamada.

Exemplo: transformação de imagem

O Cloud Functions fornece um programa de processamento de imagens chamado ImageMagick que pode realizar manipulações em arquivos de imagens gráficas. Veja a seguir um exemplo de como criar uma imagem em miniatura para um arquivo de imagem carregado:

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

Esse código executa o programa de linha de comando ImageMagick convert para criar uma miniatura de 200 x 200 para a imagem salva em um diretório temporário e depois faz o upload dela de volta para o Cloud Storage.

Explorar mais exemplos

Mais exemplos de funções comuns de transformação de mídia, incluindo transcodificação de imagens , moderação de conteúdo , extração de metadados EXIF . A lista completa de exemplos está disponível no GitHub.

Consulte a documentação completa do acionador do Google Cloud Storage para obter mais informações.