Możesz aktywować funkcję w odpowiedzi na przesłanie, zaktualizowanie lub usuwanie plików i folderów w folderze Cloud Storage.
Przykłady na tej stronie opierają się na przykładowej funkcji, która uruchamia się, gdy obraz przesłano do usługi Cloud Storage. Ta przykładowa funkcja pokazuje, jak uzyskać dostęp do atrybutów zdarzeń, jak pobrać plik do Cloud Functions oraz inne podstawy obsługi zdarzeń Cloud Storage.
Więcej przykładów zastosowań znajdziesz tutaj: Co mogę robić w usłudze Cloud Functions?
Aktywuj funkcję po wprowadzeniu Cloud Storage zmian
Użyj formatu functions.storage
aby utworzyć funkcję, która obsługuje
Wydarzenia: Cloud Storage. W zależności od tego, czy chcesz zawęzić zakres
do określonego zasobnika Cloud Storage lub użyj domyślnej
użyj jednej z tych wartości:
functions.storage.object()
w celu nasłuchiwania zmian obiektów w domyślnym zasobniku Cloud Storage.functions.storage.bucket('bucketName').object()
nasłuchiwania zmian obiektów w określonym zasobniku.
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 obiektów nie jest wysyłane, gdy obiekt zostanie zarchiwizowany (patrzonArchive
), nawet jeśli do archiwizacji nastąpi metodastorage.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 obiektu Cloud Storage
Funkcja Cloud Functions ujawnia pewną liczbę atrybutów obiektu 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 miniatura z pliku zapisanego na 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
przetworzyć plik zgodnie z potrzebami, a następnie przesłać go do Cloud Storage. Kiedy
wykonywać zadania asynchroniczne, upewnij się, że w tagu
oddzwanianie.
Przykład: przekształcenie obrazu
Używanie Cloud Functions razem z programami do przetwarzania obrazu, takimi jak
sharp
, możesz osiągnąć
manipulowania plikami graficznymi. Oto przykład tego, jak
utwórz miniaturę 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 powrót do domeny 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.