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

Wyzwalacze Cloud Storage

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

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 zastosowań znajdziesz w artykule Co mogę zrobić z Cloud Functions?

Uruchom funkcję po zmianach w Cloud Storage

Użyj functions.storage aby utworzyć funkcję, która obsługuje zdarzenia 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 wtedy, gdy zasobnik ma włączoną obsługę wersji obiektów . 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 Wysyłane, gdy obiekt został trwale usunięty. Obejmuje to obiekty, które zostały zastąpione lub usunięte w ramach konfiguracji cyklu życia zasobnika . W przypadku zasobników z włączonym wersjonowaniem obiektów nie jest to wysyłane, gdy obiekt jest archiwizowany (patrz onArchive ), nawet jeśli archiwizacja odbywa się za pomocą metody storage.objects.delete .
  • onFinalize Wysyłane, gdy nowy obiekt (lub nowa generacja istniejącego obiektu) zostanie pomyślnie utworzony w zasobniku. Obejmuje to kopiowanie lub przepisywanie istniejącego obiektu. Nieudane przesyłanie nie wyzwala tego zdarzenia.
  • onMetadataUpdate Wysyłany w przypadku zmiany metadanych istniejącego obiektu.

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

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

Cloud Functions udostępnia szereg atrybutów obiektu Cloud Storage, takich jak size i contentType dla aktualizowanego pliku. Atrybut „metageneration” jest zwiększany za każdym razem, gdy następuje zmiana w metadanych obiektu. Dla nowych obiektów wartość metageneration 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 pobierać i ponownie przesyłać obiekty do Cloud Storage, zainstaluj pakiet Google Cloud Storage za pomocą npm install --save @google-cloud/storage i zaimportuj go. Aby używać obietnic JavaScript do obsługi procesów zewnętrznych, takich jak zadania przetwarzania miniatur w przykładzie, zaimportuj także 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');

Użyj gcs.bucket.file(filePath).download , aby pobrać plik do katalogu tymczasowego w instancji Cloud Functions. 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

Cloud Functions udostępnia program do przetwarzania obrazów o nazwie ImageMagick , który może wykonywać manipulacje na graficznych plikach 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 program wiersza poleceń ImageMagick convert , aby utworzyć miniaturę 200x200 dla obrazu zapisanego w katalogu tymczasowym, a następnie przesyła go z powrotem do Cloud Storage.

Poznaj 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łna lista przykładów jest dostępna w serwisie GitHub.

Więcej informacji znajdziesz w pełnej dokumentacji aktywatora Google Cloud Storage.