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:
functions.storage.object()
wyłapywania 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 obiektu 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 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.