Cloud Storage tetikleyicileri


Cloud Storage'da dosya ve klasörlerin yüklenmesine, güncellenmesine veya silinmesine yanıt olarak bir işlevi tetikleyebilirsiniz.

Bu sayfadaki örnekler, görüntü dosyaları Cloud Storage'a yüklendiğinde tetiklenen örnek bir işleve dayalıdır. Bu örnek işlevde; etkinlik özelliklerine nasıl erişileceği, Cloud Functions örneğine nasıl dosya indirileceği ve Cloud Storage etkinliklerinin işlenmesiyle ilgili diğer temel bilgiler gösterilmektedir.

Kullanım alanına dair daha fazla örnek için Cloud Functions ile neler yapabilirim? bölümüne göz atın.

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 paketine dahil etmek mi yoksa varsayılan paketi mi kullanmak istediğinize bağlı olarak aşağıdakilerden birini kullanın:

Örneğin, küçük resim oluşturma aracı örneğinin kapsamı projedeki varsayılan paketin kapsamına alınır:

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

Cloud Storage şu etkinlikleri destekler:

  • onArchive Yalnızca bir paket nesne sürümü oluşturma özelliğini etkinleştirdiğ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. Üzerine yazılan veya paketin yaşam döngüsü yapılandırmasının parçası olarak silinen nesneleri içerir. Nesne sürümü oluşturma özelliğinin etkinleştirildiği paketlerde, bir nesne arşivlendiğinde (bkz. onArchive), arşivleme storage.objects.delete yöntemiyle olsa bile gönderilmez.
  • onFinalize Pakette yeni bir nesne (veya mevcut bir nesnenin yeni 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.

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

Cloud Storage nesne özelliklerine erişim

Cloud Functions, güncellenen dosya için size ve contentType gibi çeşitli Cloud Storage nesne özelliklerini sunar. 'metageneration' özelliği, nesnenin meta verilerinde bir değişiklik olduğunda artar. 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, dosyaların Cloud Storage'dan indirilmesi gerekmeyebilir. Ancak Cloud Storage'da depolanan bir dosyadan küçük resim oluşturma gibi yoğun görevleri gerçekleştirmek için dosyaları işlevler örneğine, yani kodunuzu çalıştıran sanal makineye indirmeniz gerekir.

Nesneleri kolayca indirip Cloud Storage'a 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 işlemek üzere JavaScript'i kullanmak için child-process-promise dosyasını da içe aktarın:

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');

Cloud Functions örneğinizdeki geçici bir dizine dosya indirmek için gcs.bucket.file(filePath).download kullanın. Bu konumda, dosyayı gerektiği gibi işleyip ardından Cloud Storage'a yükleyebilirsiniz. Eşzamansız görevleri gerçekleştirirken geri çağırmanızda bir JavaScript sözü döndürdüğünüzden emin olun.

Örnek: resim dönüştürme

Cloud Functions'ı sharp gibi görüntü işleme programlarıyla birlikte kullanarak grafik görüntü dosyaları üzerinde işlem 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 = 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!");

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

Daha fazla örnek keşfedin

Görüntülerin kodunu dönüştürme, içeriği denetleme, EXIF meta verilerini çıkarma gibi yaygın medya dönüştürme işlevlerine ilişkin diğer örnekler. Örneklerin tam listesini GitHub'da bulabilirsiniz.