Cloud Storage tetikleyicileri


Cloud Storage'da dosya ve klasörlerin yüklenmesi, güncellenmesi veya silinmesi üzerine bir işlevi tetikleyebilirsiniz.

Bu sayfadaki örnekler, resim dosyaları Cloud Storage'ya yüklendiğinde tetiklenen örnek bir işleme dayanmaktadır. Bu örnek işlev, etkinlik özelliklerine nasıl erişileceğini, Cloud Functions örneğine nasıl dosya indirileceğini ve Cloud Storage etkinliklerinin işlenmesiyle ilgili diğer temel bilgileri gösterir.

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

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

functions.storage kullanarak Cloud Storage etkinliklerini işleyen bir işlev oluşturun. İş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, projenin varsayılan paketiyle sınırlıdır:

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

Cloud Storage şu etkinlikleri destekler:

  • onArchive Yalnızca, bir pakette nesnede 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. Üzerine yazılan veya paketin yaşam döngüsü yapılandırması kapsamında silinen nesneleri içerir. Nesnede sürüm oluşturma özelliğinin etkinleştirildiği paketlerde, arşivleme işlemi storage.objects.delete yöntemiyle yapılsa bile bir nesne arşivlendiğinde bu gönderilmez (bkz. onArchive).
  • 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.

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

Cloud Storage nesne özelliklerine erişme

Cloud Functions, güncellenen dosya için Cloud Storage nesne özelliklerinden bazılarını (ör. size ve contentType) kullanıma sunar. "metageneration" özelliği, nesnenin meta verilerinde değişiklik olduğunda artırılır. Yeni nesneler için metageneration değeri 1'dir.

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ı Cloud Storage adresinden indirmeniz 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şlev örneğine (yani kodunuzu çalıştıran sanal makineye) indirmeniz gerekir.

Nesneleri kolayca indirip Cloud Storage'ya yeniden yüklemek için npm install --save @google-cloud/storage'i 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 sözlerini kullanmak istiyorsanız child-process-promise öğesini de 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');

gcs.bucket.file(filePath).download örneğinizdeki geçici bir dizine dosya indirmek için gcs.bucket.file(filePath).download'ı kullanın.Cloud Functions Bu konumda dosyayı gerektiği gibi işleyebilir ve ardından Cloud Storage'ya yükleyebilirsiniz. Eşzamansız görevleri yürütürken geri çağırma işlevinizde bir JavaScript sözü döndürdüğünüzden emin olun.

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

Cloud Functions'yı sharp gibi görüntü işleme programlarıyla birlikte kullanarak grafik görüntü dosyalarında 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 = 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 ve ardından bu resmi Cloud Storage'ya geri yükler.

Daha fazla örnek keşfedin

Görüntüleri kod dönüştürme, içeriği denetleme, EXIF meta verilerini çıkarma gibi yaygın medya dönüştürme işlevleriyle ilgili daha fazla örnek. Örneklerin tam listesini GitHub'da bulabilirsiniz.