Aktywatory Cloud Storage


Możesz aktywować funkcję w odpowiedzi na przesłanie, zaktualizowanie lub usuwania plików i folderów w Cloud Storage.

Przykłady na tej stronie opierają się na przykładowej funkcji, która uruchamia się, gdy obraz przesyłanych do Cloud Storage. Ta przykładowa funkcja pokazuje, jak uzyskać dostęp do atrybutów zdarzeń, jak pobrać plik do Cloud Functions i inne podstawy obsługi zdarzeń Cloud Storage.

Więcej przykładów zastosowań znajdziesz tutaj: Co mogę robić za pomocą Cloud Functions?

Aktywowanie funkcji w przypadku zmian w Cloud Storage

Użyj formatu functions.storage aby utworzyć funkcję, która obsługuje Zdarzenia Cloud Storage. W zależności od tego, czy chcesz zawęzić zakres do określonego zasobnika Cloud Storage lub użyj domyślnej funkcji użyj jednej z tych wartości:

Na przykład przykładowy generator miniaturek jest ograniczony do domyślnego zasobnika projekt:

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

Cloud Storage obsługuje te zdarzenia:

  • onArchive Wysyłane tylko wtedy, gdy zasobnik ma włączoną obsługę wersji obiektu. To zdarzenie wskazuje, że bieżąca wersja obiektu stała się wersją archiwalną – została zarchiwizowana albo zastąpiona przez przesłany obiekt o tej samej nazwie.
  • Wysyłane, gdy obiekt został trwale usunięty. onDelete Obejmuje to obiekty, które zostały zastąpione lub usunięte w ramach konfiguracji cyklu życia zasobnika. W przypadku zasobników z włączoną obsługą wersji obiektu nie jest wysyłane, gdy obiekt zostanie zarchiwizowany (patrz onArchive), nawet jeśli do archiwizacji nastąpi metoda storage.objects.delete.
  • onFinalize Wysyłane po utworzeniu w zasobniku nowego obiektu (lub nowej generacji istniejącego obiektu). Obejmuje to skopiowanie lub ponowne zapisanie istniejącego obiektu. Zdarzenia tego nie aktywuje nieudane przesyłanie.
  • onMetadataUpdate Wysyłane, gdy zmienią się metadane istniejącego obiektu.

Ustaw zdarzenie w module obsługi zdarzeń on w sposób podany powyżej dla onFinalize.

Dostęp do atrybutów obiektów Cloud Storage

Cloud Functions ujawnia wiele atrybutów obiektów Cloud Storage, takich jak jako size oraz contentType pliku. 'metageneration' jest zwiększany po każdej zmianie do metadanych obiektu. W przypadku nowych obiektów metageneration ma wartość 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.

Przykład generowania miniatury używa niektórych z tych atrybutów do wykrywania zdarzeń wyjściowych przypadków, w których funkcja zwraca:

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

Pobieranie, przekształcanie i przesyłanie pliku

W niektórych przypadkach pobieranie plików z usługi Cloud Storage. Jednak do wykonania intensywnych zadań, takich jak generowanie obraz miniatury z pliku zapisanego w Cloud Storage, musisz pobrać do instancji funkcji, czyli uruchomionej maszyny wirtualnej. kod.

Aby łatwo pobierać i ponownie przesyłać obiekty do Cloud Storage, zainstaluj Google Cloud Storage pakiet za pomocą npm install --save @google-cloud/storage i zaimportuj go. Aby użyć JavaScriptu obsługuje procesy zewnętrzne, takie jak zadania przetwarzania miniatur przykład, zaimportuj też child-process-promise:

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

Użyj gcs.bucket.file(filePath).download, aby pobrać plik jako plik tymczasowy w instancji Cloud Functions. W tej lokalizacji możesz odpowiednio przetworzyć plik i przesłać go do Cloud Storage. Kiedy wykonywać zadania asynchroniczne, upewnij się, że w tagu oddzwanianie.

Przykład: przekształcenie obrazu

Użycie Cloud Functions wraz z programami do przetwarzania obrazu, takimi jak sharp, możesz wykonywać manipulowania plikami graficznymi. Oto przykład tego, jak utwórz obraz miniatury dla przesłanego pliku obrazu:

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

Ten kod tworzy Miniatura obrazu 200 x 200 zapisanego w katalogu tymczasowym, a następnie przesyłana z powrotem do Cloud Storage.

Zobacz więcej przykładów

Więcej przykładów typowych funkcji transformacji mediów, w tym transkodowanie obrazów, moderowanie treści, wyodrębnianie metadanych EXIF. Pełną listę przykładów to znajdziesz na GitHubie.