Catch up on everthing we announced at this year's Firebase Summit. Learn more

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.

Kullanım durumları fazla örnek için bkz Ben Bulut Fonksiyonlar ile ne yapabilirim?

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

Kullanım functions.storage kolları Bulut Depolama olaylar olduğu bir işlev oluşturun. İş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 bir kova sağladı Yalnızca gönderilen sürüm nesneyi . 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 zaman gönderilir. Bu üzerine yazılır veya kovanın bir parçası olarak silinir nesneleri içeren yaşam döngüsü yapılandırması . İle kovalar için nesnenin sürümlendirmesini etkin bir nesne (bkz arşivlenirse, bu gönderilmez onArchive arşiv aracılığıyla gerçekleşse bile) storage.objects.delete yöntemiyle.
  • onFinalize yeni bir nesne (veya mevcut nesnenin yeni nesil) başarıyla kova 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 gönderildiğinde varolan nesne değişikliklerinin meta.

İçinde olayı Set on yukarıda gösterildiği gibi olay işleyicisi onFinalize .

Cloud Storage nesne özelliklerine erişin

Bulut Fonksiyonlar Bulut Depolama nesnesinin bir sayı gibi niteliklerini ortaya çıkarır size ve contentType güncelleştirilmiş dosya için. 'Metageneration' nesnesinin meta bir değişiklik olduğunda ona nitelik 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.

Cloud Storage kolayca indirebilir ve yeniden yükleme nesneler için, yüklemek , Google Cloud Storage paketi kullanarak npm install --save @google-cloud/storage ve içe aktarın. Numunedeki küçük resim işleme görevleri, ayrıca ithalat gibi dış süreçlerini işlemek için JavaScript sözler kullanmak için child-process-promise :

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

Kullanım gcs.bucket.file(filePath).download Cloud Fonksiyonlar örneğinde geçici dizine bir dosya indirmek için. 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

Bulut Fonksiyonlar adlandırılan bir görüntü işleme programı sağlar ImageMagick grafik görüntü dosyaları üzerinde manipülasyonlar gerçekleştirebilirsiniz. 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 yürütür ImageMagick komut satırı programı convert sonra tekrar Bulut Depolama Alanı'na yükler, geçici bir dizine kaydedilir görüntü için 200x200 küçük resim oluşturmayı.

Daha fazla örnek keşfedin

Dahil olmak üzere ortak medya dönüşüm fonksiyonlarının daha fazla örnek görüntüleri kod geçişini , içeriğin yönetilmesi , EXIF meta verileri ayıklama . Örneklerin tam listesini GitHub'dan mevcuttur.

Tam Google Cloud Storage tetik bakın belgelere Daha fazla bilgi için.