Cloud Storage tetikleyicileri


Cloud Storage'te dosya ve klasör yükleme, güncelleme veya silme işlemlerine yanıt olarak bir işlevi tetikleyebilirsiniz.

Bu sayfadaki örnekler, resim reklamınızı tıkladığında tetiklenen örnek bir işleve dosya Cloud Storage hedefine yüklendi. Bu örnek işlevde, etkinlik özelliklerine nasıl erişileceği, bir dosyanın Cloud Functions örneğine nasıl indirileceği ve Cloud Storage etkinliklerini işlemeyle ilgili diğer temel bilgiler gösterilmektedir.

Kullanım alanıyla ilgili daha fazla örnek için bkz. Cloud Functions ile ne yapabilirim?

Cloud Storage değiştiğinde işlev tetikleme

functions.storage kullanın işleyen bir fonksiyon Cloud Storage etkinlik. Kapsamı belirlemek isteyip istemediğinize bağlı olarak, işlevini belirli bir Cloud Storage paketine ekleyin veya varsayılan paketi için aşağıdakilerden birini kullanın:

Örneğin, küçük resim oluşturucu örneği, projenin varsayılan paketi için kapsamlandırılmıştır:

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

Cloud Storage aşağıdaki 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, paketin yaşam döngüsü yapılandırması kapsamında üzerine yazılan veya silinen nesneler dahildir. Nesnede sürüm oluşturma özelliğinin etkinleştirildiği paketlerde, arşivleme storage.objects.delete yöntemi kullanılarak yapılsa bile bir nesne arşivlendiğinde (bkz. onArchive) bu 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.

Etkinliği, on etkinlik işleyicisinde onFinalize için yukarıda gösterildiği şekilde ayarlayın.

Cloud Storage nesne özelliklerine erişme

Cloud Functions, güncellenen dosya için size ve contentType gibi çeşitli Cloud Storage nesne özelliklerini gösterir. İlgili içeriği oluşturmak için kullanılan "metajenerasyon" özelliğinde bir değişiklik olduğunda meta verileri. Yeni nesneler için metageneration değeri 1'dur.

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'ten dosya indirmeniz gerekmeyebilir. Bununla birlikte, yeni bir web sitesi oluşturmak gibi Cloud Storage içinde depolanan bir dosyadan küçük resim örneğin, çalışan sanal makineyi çalıştıran bir sanal makine kodunuz.

Nesneleri Cloud Storage hizmetine kolayca indirip yeniden yüklemek için Google Cloud Storage paketinden yararlanın npm install --save @google-cloud/storage oluşturup içe aktarın. Örnekteki küçük resim işleme görevleri gibi harici işlemleri yönetmek için JavaScript taahhütlerini kullanmak istiyorsanız 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');

Bir dosyayı Cloud Functions örneğinizdeki geçici bir dizine indirmek için gcs.bucket.file(filePath).download komutunu kullanın. Bu konumda şunları yapabilirsiniz: dosyayı gerektiği gibi işleyip Cloud Storage hedefine yükleyin. Zaman eş zamansız görevleri yerine getirmek için, geri arama.

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

Cloud Functions aracını sharp, şunları gerçekleştirebilirsiniz: grafik görüntü dosyaları üzerinde değişiklikler. Aşağıda, bu tür bir riskin Yüklenen bir resim dosyası için küçük resim oluşturma:

// 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 adresine yeniden yükler.

Daha fazla örnek

Resimleri kod dönüştürme, içerikleri denetleme ve EXIF meta verilerini ayıklama gibi yaygın medya dönüştürme işlevlerine dair daha fazla örnek. Örneklerin tam listesi şunlardır: GitHub'da bulabilirsiniz.