Catch up on everthing we announced at this year's Firebase Summit. Learn more

Wyzwalacze Cloud Storage

Możesz uruchomić funkcję w odpowiedzi na przesłanie, aktualizację lub usunięcie plików i folderów w Cloud Storage.

Przykłady na tej stronie są oparte na przykładowej funkcji, która uruchamia się, gdy pliki obrazów są przesyłane do Cloud Storage. Ta przykładowa funkcja pokazuje, jak uzyskać dostęp do atrybutów zdarzeń, jak pobrać plik do instancji Cloud Functions, a także poznać inne podstawy obsługi zdarzeń Cloud Storage.

Więcej przykładów przypadków użycia, zobacz Co mogę zrobić z funkcji chmurze?

Uruchom funkcję po zmianach w Cloud Storage

Użyj functions.storage aby utworzyć funkcję, która obsługuje wydarzeń Cloud Storage. W zależności od tego, czy chcesz zawęzić zakres swojej funkcji do określonego zasobnika Cloud Storage, czy użyć zasobnika domyślnego, użyj jednej z tych opcji:

Na przykład przykład generatora miniatur obejmuje domyślny zasobnik projektu:

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

Cloud Storage obsługuje te zdarzenia:

  • onArchive Tylko wysłana, gdy wiadro włączył obiekt wersjami . To zdarzenie wskazuje, że aktywna wersja obiektu stała się wersją zarchiwizowaną, ponieważ została zarchiwizowana lub została zastąpiona przez przesłanie obiektu o tej samej nazwie.
  • onDelete Sent, gdy obiekt został trwale usunięty. Obejmuje to obiekty, które zostaną zastąpione lub są usuwane w ramach wiadra w konfiguracji cyklu życia . Do wiadra z obiektu wersjonowanie włączona, to nie jest wysyłany, gdy obiekt jest zachowana w archiwum (patrz onArchive ), nawet jeśli występuje archiwalnych poprzez storage.objects.delete metody.
  • onFinalize Wysłane gdy nowy obiekt (lub nowa generacja istniejącego obiektu) został pomyślnie utworzony w wiadrze. Obejmuje to kopiowanie lub przepisywanie istniejącego obiektu. Nieudane przesyłanie nie wyzwala tego zdarzenia.
  • onMetadataUpdate wysłana, gdy metadane istniejącego zmian obiektów.

Ustaw zdarzenie w on obsługi zdarzeń, jak pokazano powyżej onFinalize .

Uzyskaj dostęp do atrybutów obiektów Cloud Storage

Funkcje Chmura odsłania szereg obiektu Cloud Storage atrybuty takie jak size i contentType dla pliku aktualizowana. „Metageneration” atrybut jest zwiększana, gdy istnieje zmiana metadanych obiektu. W przypadku nowych obiektów, poszczególnych metageneration wartość wynosi 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.

Przykładowe generowanie miniatur wykorzystuje niektóre z tych atrybutów do wykrywania przypadków wyjścia, 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.');
}

Pobierz, przekształć i prześlij plik

W niektórych przypadkach pobieranie plików z Cloud Storage może nie być konieczne. Jednak w celu wykonywania intensywnych zadań, takich jak generowanie obrazu miniatury z pliku przechowywanego w Cloud Storage, musisz pobrać pliki do wystąpienia funkcji — czyli maszyny wirtualnej, na której uruchamiany jest Twój kod.

Aby łatwo pobrać i ponownie przesłać obiektów do Cloud Storage, należy zainstalować pakiet Google Cloud Storage używając npm install --save @google-cloud/storage i zaimportować go. Aby korzystać z obietnic JavaScript do obsługi procesów zewnętrznych, takich jak zadania przetwarzania miniatur w próbce, również importować 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');

Zastosowanie gcs.bucket.file(filePath).download pobrać plik do katalogu tymczasowego na chmurze Funkcje instancji. W tej lokalizacji możesz w razie potrzeby przetworzyć plik, a następnie przesłać go do Cloud Storage. Podczas wykonywania zadań asynchronicznych upewnij się, że zwracasz obietnicę JavaScript w swoim wywołaniu zwrotnym.

Przykład: transformacja obrazu

Funkcje Chmura zapewnia program przetwarzania obrazu o nazwie ImageMagick , który może wykonywać manipulacje na graficznych plików graficznych. Poniżej znajduje się przykład tworzenia miniatury dla przesłanego pliku obrazu:

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

Ten kod wykonuje ImageMagick poleceń programu linia convert stworzenia 200x200 miniaturę obrazu zapisanego w katalogu tymczasowego, a następnie przesyła je z powrotem do Cloud Storage.

Poznaj więcej przykładów

Więcej przykładów funkcji multimedialnych, w tym wspólny transformacji transkodowania obrazów , moderowanie treści , ekstrakcję metadanych EXIF . Pełna lista przykładów jest dostępny na GitHub.

Zobacz pełną wyzwolić Google Cloud Storage dokumentację aby uzyskać więcej informacji.