Cloud Storage tetikleyicileri


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

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

Kullanım alanı örnekleri 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 paketiyle 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 örneği örneğinin kapsamı, projenin varsayılan paketine ayarlanır:

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, 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öntemiyle gerçekleşse 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, onFinalize için yukarıda gösterildiği gibi on etkinlik işleyici içinde 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 sunar. Nesnenin meta verilerinde değişiklik olduğunda "metagenerate" özelliği 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 şu ö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'dan dosya 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'a yeniden yüklemek için npm install --save @google-cloud/storage uygulamasını kullanarak Google Cloud Storage paketini yükleyin ve içe aktarın. JavaScript taahhütlerini kullanarak örnekteki küçük resim işleme görevleri gibi harici işlemleri işlemek için 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');

Cloud Functions örneğinizdeki geçici bir dizine dosya indirmek için gcs.bucket.file(filePath).download kullanın. Bu konumda, dosyayı gereken şekilde işleyebilir ve ardından Cloud Storage'a yükleyebilirsiniz. Eşzamansız görevleri gerçekleştirirken, geri çağırmanızda bir JavaScript taahhüdünü 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 resim dosyası için küçük resim oluşturmanın nasıl yapılacağına dair bir örnek 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'a geri yükler.

Diğer örnekleri keşfedin

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