Bulut Depolama tetikleyicileri

Cloud Storage'daki 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 dayanmaktadır. Bu örnek işlev, olay özniteliklerine nasıl erişileceğini, bir dosyanın bir Cloud Functions örneğine nasıl indirileceğini ve Cloud Storage olaylarını işlemenin diğer temellerini gösterir.

Daha fazla kullanım örneği için bkz . Cloud Functions ile neler yapabilirim?

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

Bulut Depolama olaylarını işleyen bir functions.storage oluşturmak için functions.storage'ı kullanın. İşlevinizi belirli bir Bulut Depolama paketi kapsamına almak 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ğinin kapsamı proje için varsayılan pakete göre belirlenir:

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

Cloud Storage şu etkinlikleri destekler:

  • onArchive Yalnızca bir paket nesne sürümü oluşturmayı etkinleştirdiğinde gönderilir. Bu olay, bir nesnenin canlı sürümünün, arşivlendiğinden veya aynı ada sahip bir nesnenin karşıya yüklenmesiyle üzerine yazıldığından, arşivlenmiş bir sürüm haline geldiğini gösterir.
  • onDelete Bir nesne kalıcı olarak silindiğinde gönderilir. Buna, paketin yaşam döngüsü yapılandırmasının bir parçası olarak üzerine yazılan veya silinen nesneler dahildir. Nesne sürümü oluşturmanın etkinleştirildiği paketler için, bir nesne arşivlendiğinde (bkz. onArchive ) bu, arşivleme storage.objects.delete yöntemi aracılığıyla gerçekleşse bile gönderilmez.
  • onFinalize yeni bir nesne (veya mevcut bir nesnenin yeni nesli) başarıyla oluşturulduğunda gönderilir. Bu, mevcut bir nesneyi kopyalamayı veya yeniden yazmayı içerir. Başarısız bir yükleme bu olayı tetiklemez.
  • onMetadataUpdate Varolan bir nesnenin meta verileri değiştiğinde gönderilir.

onFinalize için yukarıda gösterildiği gibi on olay işleyicisindeki olayı ayarlayın.

Cloud Storage nesne özelliklerine erişin

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

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.
const metageneration = object.metageneration; // Number of times metadata has been generated. New objects have a value of 1.

Küçük resim oluşturma örneği, işlevin geri döndüğü çıkış durumlarını algılamak için bu özniteliklerden 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.');
}

Bir dosyayı indirin, dönüştürün ve yükleyin

Bazı durumlarda, Cloud Storage'dan dosya indirmek gerekli olmayabilir. Ancak, Cloud Storage'da depolanan bir dosyadan küçük resim oluşturmak gibi yoğun görevleri gerçekleştirmek için işlev örneğine, yani kodunuzu çalıştıran sanal makineye dosya 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 süreçleri işlemek üzere JavaScript vaatlerini kullanmak için, ayrıca child-process-promise içe aktarın:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp()
const spawn = require('child-process-promise').spawn;
const path = require('path');
const os = require('os');
const fs = require('fs');

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şleyebilir ve ardından Cloud Storage'a yükleyebilirsiniz. Eşzamansız görevleri gerçekleştirirken, geri aramanızda bir JavaScript vaadi döndürdüğünüzden emin olun.

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

Cloud Functions, grafik görüntü dosyaları üzerinde manipülasyonlar gerçekleştirebilen ImageMagick adlı bir görüntü işleme programı sağlar. Aşağıda, yüklenen bir resim dosyası için küçük resmin nasıl oluşturulacağına dair bir örnek verilmiştir:

// Download file from bucket.
const bucket = admin.storage().bucket(fileBucket);
const tempFilePath = path.join(os.tmpdir(), fileName);
const metadata = {
  contentType: contentType,
};
await bucket.file(filePath).download({destination: tempFilePath});
functions.logger.log('Image downloaded locally to', tempFilePath);
// Generate a thumbnail using ImageMagick.
await spawn('convert', [tempFilePath, '-thumbnail', '200x200>', tempFilePath]);
functions.logger.log('Thumbnail created at', tempFilePath);
// We add a 'thumb_' prefix to thumbnails file name. That's where we'll upload the thumbnail.
const thumbFileName = `thumb_${fileName}`;
const thumbFilePath = path.join(path.dirname(filePath), thumbFileName);
// Uploading the thumbnail.
await bucket.upload(tempFilePath, {
  destination: thumbFilePath,
  metadata: metadata,
});
// Once the thumbnail has been uploaded delete the local file to free up disk space.
return fs.unlinkSync(tempFilePath);

Bu kod, geçici bir dizine kaydedilen görüntü için 200x200 küçük resim oluşturmak üzere ImageMagick komut satırı programı convert yürütür ve ardından onu Cloud Storage'a geri yükler.

Daha fazla örnek keşfedin

Görüntülerin kodunun dönüştürülmesi , içeriğin denetlenmesi , EXIF meta verilerinin çıkarılması dahil olmak üzere yaygın medya dönüştürme işlevlerine ilişkin daha fazla örnek. Örneklerin tam listesi GitHub'da mevcuttur.

Daha fazla bilgi için tam Google Bulut Depolama tetikleyici belgelerine bakın.