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

Rozszerz przechowywanie w chmurze dzięki funkcjom chmury

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

Możesz uruchomić funkcję w odpowiedzi na przesyłanie, aktualizowanie lub usuwanie 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 oraz inne podstawy obsługi zdarzeń Cloud Storage.

Więcej przykładów zastosowań znajdziesz w artykule Co mogę zrobić z Cloud Functions?

Wyzwól funkcję przy zmianach Cloud Storage

Użyj functions.storage , aby utworzyć funkcję obsługującą zdarzenia Cloud Storage. W zależności od tego, czy chcesz ograniczyć swoją funkcję do określonego zasobnika Cloud Storage, czy użyć zasobnika domyślnego, użyj jednego z poniższych:

Na przykład próbka generatora miniatur jest ograniczona do domyślnego zasobnika dla projektu:

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

Cloud Storage obsługuje te zdarzenia:

  • onArchive tylko wtedy, gdy w zasobniku włączono wersjonowanie 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łany obiekt o tej samej nazwie.
  • onDelete Wysyłane, gdy obiekt został trwale usunięty. Obejmuje to obiekty, które są zastępowane lub usuwane w ramach konfiguracji cyklu życia zasobnika . W przypadku zasobników z włączoną obsługą wersji obiektów ta informacja nie jest wysyłana, 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łane, gdy zmieniają się metadane istniejącego obiektu.

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

Uzyskaj dostęp do atrybutów obiektu Cloud Storage

Cloud Functions udostępnia szereg atrybutów obiektu Cloud Storage, takich jak size i contentType zawartości dla zaktualizowanego 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.

Próbka generowania 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 aby wykonywać intensywne zadania, takie jak generowanie obrazu miniatury z pliku przechowywanego w Cloud Storage, musisz pobrać pliki do instancji funkcji, czyli maszyny wirtualnej, na której działa 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żyć 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 przetworzyć plik zgodnie z potrzebami, a następnie przesłać go do Cloud Storage. Podczas wykonywania zadań asynchronicznych upewnij się, że zwracasz obietnicę JavaScript w wywołaniu zwrotnym.

Przykład: transformacja obrazu

Cloud Functions udostępnia program do przetwarzania obrazu o nazwie ImageMagick , który może wykonywać manipulacje na graficznych plikach graficznych. Poniżej przedstawiono przykład tworzenia obrazu 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 convert programu wiersza poleceń ImageMagick w celu utworzenia miniatury 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 multimediów, w tym transkodowanie obrazów , moderowanie treści , wyodrębnianie metadanych EXIF . Pełna lista przykładów jest dostępna na GitHub.

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