Вы можете активировать функцию в ответ на загрузку, обновление или удаление файлов и папок в Cloud Storage .
Примеры на этой странице основаны на примере функции, которая срабатывает при загрузке файлов изображений в Cloud Storage . В этом примере функции показано, как получить доступ к атрибутам событий, как загрузить файл в экземпляр Cloud Functions и другие основы обработки событий Cloud Storage .
Дополнительные примеры вариантов использования см. в разделе «Что я могу делать с помощью Cloud Functions ?».
Запуск функции при изменениях в Cloud Storage
Используйте functions.storage
, чтобы создать функцию, которая обрабатывает события Cloud Storage . В зависимости от того, хотите ли вы ограничить свою функцию определенным сегментом Cloud Storage или использовать сегмент по умолчанию, используйте один из следующих вариантов:
-
functions.storage.object()
для прослушивания изменений объектов в сегменте Cloud Storage по умолчанию. -
functions.storage.bucket('bucketName').object()
для прослушивания изменений объекта в определенном сегменте.
Например, пример генератора миниатюр ограничен сегментом по умолчанию для проекта:
exports.firstGenGenerateThumbnail = functions.storage.object().onFinalize(async (object) => { // ... });
Cloud Storage поддерживает следующие события:
-
onArchive
Отправляется только в том случае, если в сегменте включено управление версиями объектов . Это событие указывает на то, что действующая версия объекта стала архивной версией либо потому, что она была заархивирована, либо потому, что она была перезаписана при загрузке объекта с тем же именем. -
onDelete
Отправляется, когда объект был окончательно удален. Сюда входят объекты, которые перезаписываются или удаляются в рамках конфигурации жизненного цикла сегмента. Для сегментов с включенным управлением версиями объектов это сообщение не отправляется при архивировании объекта (см.onArchive
), даже если архивирование происходит с помощью методаstorage.objects.delete
. -
onFinalize
Отправляется, когда в сегменте успешно создается новый объект (или новое поколение существующего объекта). Сюда входит копирование или перезапись существующего объекта. Неудачная загрузка не вызывает это событие. -
onMetadataUpdate
Отправляется при изменении метаданных существующего объекта.
Установите событие в обработчике событий on
, как показано выше для onFinalize
.
Доступ к атрибутам объекта Cloud Storage
Cloud Functions предоставляет ряд атрибутов объекта Cloud Storage , таких как size
и contentType
для обновляемого файла. Атрибут «метагенерация» увеличивается при каждом изменении метаданных объекта. Для новых объектов значение metageneration
равно 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.
В примере создания миниатюр используются некоторые из этих атрибутов для обнаружения случаев выхода, при которых функция возвращает значение:
// 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.'); }
Загрузите, преобразуйте и загрузите файл
В некоторых случаях загрузка файлов из Cloud Storage может не потребоваться. Однако для выполнения ресурсоемких задач, таких как создание миниатюры изображения из файла, хранящегося в Cloud Storage , вам необходимо загрузить файлы в экземпляр функции, то есть виртуальную машину, на которой выполняется ваш код.
Чтобы легко загружать и повторно загружать объекты в Cloud Storage , установите пакет Google Cloud Storage с помощью npm install --save @google-cloud/storage
и импортируйте его. Чтобы использовать обещания JavaScript для обработки внешних процессов, таких как задачи обработки миниатюр в примере, также импортируйте 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');
Используйте gcs.bucket.file(filePath).download
, чтобы загрузить файл во временный каталог на вашем экземпляре Cloud Functions . В этом месте вы можете обработать файл по мере необходимости, а затем загрузить в Cloud Storage . При выполнении асинхронных задач обязательно возвращайте обещание JavaScript в обратном вызове.
Пример: преобразование изображения
Используя Cloud Functions вместе с программами обработки изображений, такими как sharp
, вы можете выполнять манипуляции с графическими файлами изображений. Ниже приведен пример создания миниатюры для загруженного файла изображения:
// 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!");
Этот код создает миниатюру 200x200 для изображения, сохраненного во временном каталоге, а затем загружает его обратно в Cloud Storage .
Посмотреть больше примеров
Дополнительные примеры общих функций преобразования мультимедиа, включая перекодирование изображений , модерацию контента , извлечение метаданных EXIF . Полный список примеров доступен на GitHub.
,Вы можете активировать функцию в ответ на загрузку, обновление или удаление файлов и папок в Cloud Storage .
Примеры на этой странице основаны на примере функции, которая срабатывает при загрузке файлов изображений в Cloud Storage . В этом примере функции показано, как получить доступ к атрибутам событий, как загрузить файл в экземпляр Cloud Functions и другие основы обработки событий Cloud Storage .
Дополнительные примеры вариантов использования см. в разделе «Что я могу делать с помощью Cloud Functions ?».
Запуск функции при изменениях в Cloud Storage
Используйте functions.storage
, чтобы создать функцию, которая обрабатывает события Cloud Storage . В зависимости от того, хотите ли вы ограничить свою функцию определенным сегментом Cloud Storage или использовать сегмент по умолчанию, используйте один из следующих вариантов:
-
functions.storage.object()
для прослушивания изменений объектов в сегменте Cloud Storage по умолчанию. -
functions.storage.bucket('bucketName').object()
для прослушивания изменений объекта в определенном сегменте.
Например, пример генератора миниатюр ограничен сегментом по умолчанию для проекта:
exports.firstGenGenerateThumbnail = functions.storage.object().onFinalize(async (object) => { // ... });
Cloud Storage поддерживает следующие события:
-
onArchive
Отправляется только в том случае, если в сегменте включено управление версиями объектов . Это событие указывает на то, что действующая версия объекта стала архивной версией либо потому, что она была заархивирована, либо потому, что она была перезаписана при загрузке объекта с тем же именем. -
onDelete
Отправляется, когда объект был окончательно удален. Сюда входят объекты, которые перезаписываются или удаляются в рамках конфигурации жизненного цикла сегмента. Для сегментов с включенным управлением версиями объектов это сообщение не отправляется при архивировании объекта (см.onArchive
), даже если архивирование происходит с помощью методаstorage.objects.delete
. -
onFinalize
Отправляется, когда в сегменте успешно создается новый объект (или новое поколение существующего объекта). Сюда входит копирование или перезапись существующего объекта. Неудачная загрузка не вызывает это событие. -
onMetadataUpdate
Отправляется при изменении метаданных существующего объекта.
Установите событие в обработчике событий on
, как показано выше для onFinalize
.
Доступ к атрибутам объекта Cloud Storage
Cloud Functions предоставляет ряд атрибутов объекта Cloud Storage , таких как size
и contentType
для обновляемого файла. Атрибут «метагенерация» увеличивается при каждом изменении метаданных объекта. Для новых объектов значение metageneration
равно 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.
В примере создания миниатюр используются некоторые из этих атрибутов для обнаружения случаев выхода, при которых функция возвращает значение:
// 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.'); }
Загрузите, преобразуйте и загрузите файл
В некоторых случаях загрузка файлов из Cloud Storage может не потребоваться. Однако для выполнения ресурсоемких задач, таких как создание миниатюры изображения из файла, хранящегося в Cloud Storage , вам необходимо загрузить файлы в экземпляр функции, то есть виртуальную машину, на которой выполняется ваш код.
Чтобы легко загружать и повторно загружать объекты в Cloud Storage , установите пакет Google Cloud Storage с помощью npm install --save @google-cloud/storage
и импортируйте его. Чтобы использовать обещания JavaScript для обработки внешних процессов, таких как задачи обработки миниатюр в примере, также импортируйте 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');
Используйте gcs.bucket.file(filePath).download
, чтобы загрузить файл во временный каталог на вашем экземпляре Cloud Functions . В этом месте вы можете обработать файл по мере необходимости, а затем загрузить в Cloud Storage . При выполнении асинхронных задач обязательно возвращайте обещание JavaScript в обратном вызове.
Пример: преобразование изображения
Используя Cloud Functions вместе с программами обработки изображений, такими как sharp
, вы можете выполнять манипуляции с графическими файлами изображений. Ниже приведен пример создания миниатюры для загруженного файла изображения:
// 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!");
Этот код создает миниатюру 200x200 для изображения, сохраненного во временном каталоге, а затем загружает его обратно в Cloud Storage .
Посмотреть больше примеров
Дополнительные примеры общих функций преобразования мультимедиа, включая перекодирование изображений , модерацию контента , извлечение метаданных EXIF . Полный список примеров доступен на GitHub.
,Вы можете активировать функцию в ответ на загрузку, обновление или удаление файлов и папок в Cloud Storage .
Примеры на этой странице основаны на примере функции, которая срабатывает при загрузке файлов изображений в Cloud Storage . В этом примере функции показано, как получить доступ к атрибутам событий, как загрузить файл в экземпляр Cloud Functions и другие основы обработки событий Cloud Storage .
Дополнительные примеры вариантов использования см. в разделе «Что я могу делать с помощью Cloud Functions ?».
Запуск функции при изменениях в Cloud Storage
Используйте functions.storage
, чтобы создать функцию, которая обрабатывает события Cloud Storage . В зависимости от того, хотите ли вы ограничить свою функцию определенным сегментом Cloud Storage или использовать сегмент по умолчанию, используйте один из следующих вариантов:
-
functions.storage.object()
для прослушивания изменений объектов в сегменте Cloud Storage по умолчанию. -
functions.storage.bucket('bucketName').object()
для прослушивания изменений объекта в определенном сегменте.
Например, пример генератора миниатюр ограничен сегментом по умолчанию для проекта:
exports.firstGenGenerateThumbnail = functions.storage.object().onFinalize(async (object) => { // ... });
Cloud Storage поддерживает следующие события:
-
onArchive
Отправляется только в том случае, если в сегменте включено управление версиями объектов . Это событие указывает на то, что действующая версия объекта стала архивной версией либо потому, что она была заархивирована, либо потому, что она была перезаписана при загрузке объекта с тем же именем. -
onDelete
Отправляется, когда объект был окончательно удален. Сюда входят объекты, которые перезаписываются или удаляются в рамках конфигурации жизненного цикла сегмента. Для сегментов с включенным управлением версиями объектов это сообщение не отправляется при архивировании объекта (см.onArchive
), даже если архивирование происходит с помощью методаstorage.objects.delete
. -
onFinalize
Отправляется, когда в сегменте успешно создается новый объект (или новое поколение существующего объекта). Сюда входит копирование или перезапись существующего объекта. Неудачная загрузка не вызывает это событие. -
onMetadataUpdate
Отправляется при изменении метаданных существующего объекта.
Установите событие в обработчике событий on
, как показано выше для onFinalize
.
Доступ к атрибутам объекта Cloud Storage
Cloud Functions предоставляет ряд атрибутов объекта Cloud Storage , таких как size
и contentType
для обновляемого файла. Атрибут «метагенерация» увеличивается при каждом изменении метаданных объекта. Для новых объектов значение metageneration
равно 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.
В примере создания миниатюр используются некоторые из этих атрибутов для обнаружения случаев выхода, при которых функция возвращает значение:
// 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.'); }
Загрузите, преобразуйте и загрузите файл
В некоторых случаях загрузка файлов из Cloud Storage может не потребоваться. Однако для выполнения ресурсоемких задач, таких как создание миниатюры изображения из файла, хранящегося в Cloud Storage , вам необходимо загрузить файлы в экземпляр функции, то есть виртуальную машину, на которой выполняется ваш код.
Чтобы легко загружать и повторно загружать объекты в Cloud Storage , установите пакет Google Cloud Storage с помощью npm install --save @google-cloud/storage
и импортируйте его. Чтобы использовать обещания JavaScript для обработки внешних процессов, таких как задачи обработки миниатюр в примере, также импортируйте 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');
Используйте gcs.bucket.file(filePath).download
, чтобы загрузить файл во временный каталог на вашем экземпляре Cloud Functions . В этом месте вы можете обработать файл по мере необходимости, а затем загрузить в Cloud Storage . При выполнении асинхронных задач обязательно возвращайте обещание JavaScript в обратном вызове.
Пример: преобразование изображения
Используя Cloud Functions вместе с программами обработки изображений, такими как sharp
, вы можете выполнять манипуляции с графическими файлами изображений. Ниже приведен пример создания миниатюры для загруженного файла изображения:
// 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!");
Этот код создает миниатюру 200x200 для изображения, сохраненного во временном каталоге, а затем загружает его обратно в Cloud Storage .
Посмотреть больше примеров
Дополнительные примеры общих функций преобразования мультимедиа, включая перекодирование изображений , модерацию контента , извлечение метаданных EXIF . Полный список примеров доступен на GitHub.
,Вы можете запустить функцию в ответ на загрузку, обновление или удаление файлов и папок в Cloud Storage .
Примеры на этой странице основаны на образце функции, которая запускает, когда файлы изображений загружаются в Cloud Storage . Эта примерная функция демонстрирует, как получить доступ к атрибутам события, как загрузить файл в экземпляр Cloud Functions и другие основы обработки событий Cloud Storage .
Для получения дополнительных примеров вариантов использования, посмотрите , что я могу сделать с Cloud Functions ?
Запустить функцию при изменениях Cloud Storage
Используйте functions.storage
Cloud Storage В зависимости от того, хотите ли вы охватить свою функцию в определенное ведро Cloud Storage или использовать ведро по умолчанию, используйте одно из следующих действий:
-
functions.storage.object()
для прослушивания изменений объекта в ведре Cloud Storage по умолчанию. -
functions.storage.bucket('bucketName').object()
для прослушивания изменений объекта на конкретном ведре.
Например, образец генератора миниатюрного генератора подходит к ведру по умолчанию для проекта:
exports.firstGenGenerateThumbnail = functions.storage.object().onFinalize(async (object) => { // ... });
Cloud Storage поддерживает эти события:
-
onArchive
отправит только тогда, когда ведро включает версию объекта . Это событие указывает на то, что живая версия объекта стала архивированной версией, потому что она была архивирована, либо потому, что она была перезаписана загрузкой с одноименным объектом. -
onDelete
отправил, когда объект был навсегда удален. Это включает в себя объекты, которые перезаписаны или удаляются как часть конфигурации жизненного цикла ведра. Для ведра с включением версии объекта это не отправляется, когда объект архивируется (см.onArchive
), даже если архив происходит с помощью методаstorage.objects.delete
. -
onFinalize
отправлено, когда новый объект (или новое поколение существующего объекта) успешно создается в ведре. Это включает копирование или переписывание существующего объекта. Неудачная загрузка не запускает это событие. -
onMetadataUpdate
отправлено при изменении метаданных существующего объекта.
Установите событие в обработчике ENT on
, как показано выше для onFinalize
.
Доступ к атрибутам объекта Cloud Storage
Cloud Functions разоблачает ряд атрибутов объекта Cloud Storage , таких как size
и contentType
для обновления файла. Атрибут «метагенерации» увеличивается всякий раз, когда существует изменение метаданных объекта. Для новых объектов значение metageneration
составляет 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.
Выборка генерации миниатюры использует некоторые из этих атрибутов для обнаружения случаев выхода, в которых функция возвращается:
// 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.'); }
Скачать, преобразовать и загрузить файл
Для некоторых случаев, возможно, не потребуется загружать файлы из Cloud Storage . Однако для выполнения интенсивных задач, таких как генерация миниатюрного изображения из файла, хранящегося в Cloud Storage , вам необходимо загрузить файлы в экземпляр функций, то есть виртуальная машина, которая запускает ваш код.
Чтобы легко загрузить и повторно загружать объекты в Cloud Storage , установите пакет Google Cloud Storage с помощью npm install --save @google-cloud/storage
и импортируйте его. Для использования JavaScript обещает обрабатывать внешние процессы, такие как задачи обработки миниатюры в выборке, также импортируйте 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');
Используйте gcs.bucket.file(filePath).download
для загрузки файла во временный каталог в экземпляре Cloud Functions . В этом месте вы можете обработать файл по мере необходимости, а затем загружать в Cloud Storage . При выполнении асинхронных задач убедитесь, что вы возвращаете обещание JavaScript в своем обратном вызове.
Пример: преобразование изображения
Используя Cloud Functions вместе с программами обработки изображений, такими как sharp
, вы можете выполнять манипуляции в графических файлах изображений. Ниже приведен пример того, как создать изображение миниатюры для загруженного файла изображения:
// 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!");
Этот код создает миниатюру 200x200 для изображения, сохраненного во временном каталоге, а затем загружает его в Cloud Storage .
Изучите больше примеров
Больше примеров общих функций преобразования среды, включая транскодирование изображений , модерирование контента , извлечение метаданных ESIF . Полный список примеров доступен на GitHub.