Cloud Storage tetikleyicileri (1. nesil)

Cloud Storage uygulamasında dosya ve klasörlerin yüklenmesi, güncellenmesi veya silinmesine yanıt olarak bir işlevi tetikleyebilirsiniz.

Bu sayfadaki örnekler, resim dosyaları Cloud Storage konumuna yüklendiğinde tetiklenen örnek bir işlevi temel alır. Bu örnek işlev, etkinlik özelliklerine nasıl erişileceğini, bir dosyanın Cloud Functions örneğine nasıl indirileceğini ve Cloud Storage etkinliklerini işlemenin diğer temel noktalarını gösterir.

Kullanım alanlarıyla ilgili daha fazla örnek için Cloud Functions ile neler yapabilirim? başlıklı makaleyi inceleyin.

Cloud Storage değişikliklerinde bir işlevi tetikleme

Cloud Storage etkinliklerini işleyen bir işlev oluşturmak için functions.storage kullanın. İşlevinizin kapsamını belirli bir Cloud Storage paketiyle sınırlamak veya varsayılan paketi kullanmak isteyip istemediğinize bağlı olarak aşağıdakilerden birini kullanın:

Örneğin, küçük resim oluşturucu örneği, proje için varsayılan paketi kapsar:

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

Cloud Storage şu etkinlikleri destekler:

  • onArchive Yalnızca bir pakette nesne sürümü oluşturma etkinleştirildiğinde gönderilir. Bu etkinlik, bir nesnenin canlı sürümünün, ya arşivlendiği ya da aynı ada sahip bir nesne yüklemesi ile üzerine yazıldığı için arşivlenmiş bir sürüm haline geldiğini belirtir.
  • onDelete Bir nesne kalıcı olarak silindiğinde gönderilir. Buna, üzerine yazılan veya paketin yaşam döngüsü yapılandırması kapsamında silinen nesneler dahildir. Nesne sürümü oluşturma özelliğinin etkinleştirildiği paketlerde, bir nesne arşivlendiğinde (bkz. onArchive) bu bildirim gönderilmez. Arşivleme işlemi storage.objects.delete yöntemiyle gerçekleştirilse bile bu durum geçerlidir.
  • onFinalize Pakette yeni bir nesne (veya mevcut bir nesnenin yeni bir nesli) başarıyla oluşturulduğunda gönderilir. Bu, mevcut bir nesnenin kopyalanmasını veya yeniden yazılmasını içerir. Başarısız olan bir yükleme, bu etkinliği tetiklemez.
  • onMetadataUpdate Mevcut bir nesnenin meta verileri değiştiğinde gönderilir.

Etkinliği, onFinalize için yukarıda gösterildiği gibi on etkinlik işleyicisi içinde ayarlayın.

Cloud Storage nesne özelliğine erişim

Cloud Functions, güncellenen dosya için size ve contentType gibi bir dizi Cloud Storage nesne özelliği sunar. Nesnenin meta verilerinde her değişiklik olduğunda "metageneration" özelliği artırılır. Yeni nesneler için metageneration değeri 1 olur.

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.

Küçük resim oluşturma örneği, işlevin döndürdüğü çıkış durumlarını algılamak için bu özelliklerden bazılarını kullanır:

// 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.');
}

Dosya indirme, dönüştürme ve yükleme

Bazı durumlarda Cloud Storage adresinden dosya indirmek gerekmeyebilir. Ancak Cloud Storage içinde depolanan bir dosyadan küçük resim oluşturma gibi yoğun görevleri gerçekleştirmek için dosyaları işlev örneğine, yani kodunuzu çalıştıran sanal makineye indirmeniz gerekir.

Nesneleri kolayca indirip Cloud Storage hizmetine yeniden yüklemek için npm install --save @google-cloud/storage kullanarak Google Cloud Storage paketini yükleyin ve içe aktarın. Örnekteki küçük resim işleme görevleri gibi harici işlemleri yönetmek için JavaScript Promise'lerini kullanmak istiyorsanız child-process-promise modülünü de içe aktarın:

const functions = require('firebase-functions/v1');
const { initializeApp } = require('firebase-admin/app');
const { getStorage } = require('firebase-admin/storage');
initializeApp();
const path = require('path');

//library for resizing images
const sharp = /** @type {typeof import('sharp')} */ (require('sharp'));

gcs.bucket.file(filePath).download kullanarak bir dosyayı Cloud Functions örneğinizdeki geçici bir dizine indirin. Bu konumda dosyayı gerektiği gibi işleyebilir ve ardından Cloud Storage platformuna yükleyebilirsiniz. Eşzamansız görevleri gerçekleştirirken geri çağırma işlevinizde bir JavaScript Promise döndürdüğünüzden emin olun.

Örnek: görüntü dönüştürme

Cloud Functions ile sharp gibi görüntü işleme programlarını birlikte kullanarak grafik resim dosyaları üzerinde değişiklik yapabilirsiniz. Aşağıda, yüklenen bir resim dosyası için küçük resim oluşturma örneği verilmiştir:

// Download file from bucket.
const bucket = getStorage().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!");

Bu kod, geçici bir dizine kaydedilen resim için 200x200 boyutunda bir küçük resim oluşturur ve ardından bu resmi tekrar Cloud Storage dizinine yükler.

Diğer örnekleri inceleyin

Görüntülerin kodunu dönüştürme, içerik denetleme, EXIF meta verilerini ayıklama gibi yaygın medya dönüştürme işlevleriyle ilgili daha fazla örnek. Örneklerin tam listesini GitHub'da bulabilirsiniz.