了解 2023 年 Google I/O 大会上介绍的 Firebase 亮点。了解详情

Bulut Depolama tetikleyicileri


Cloud Storage'da 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şlevi temel alı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 durumu örneği için bkz. Cloud Functions ile ne yapabilirim?

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

Cloud Storage olaylarını işleyen bir işlev oluşturmak için functions.storage kullanın. İşlevinizin kapsamını belirli bir Cloud Storage grubuyla mı yoksa varsayılan grubuyla mı kullanmak istediğ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 grup olarak belirlenmiştir:

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

Cloud Storage şu etkinlikleri destekler:

  • onArchive Yalnızca bir grup nesne sürüm oluşturmayı etkinleştirdiğinde gönderilir. Bu olay, bir nesnenin canlı sürümünün, ya arşivlendiği için ya da aynı ada sahip bir nesnenin karşıya yüklenmesiyle üzerine yazıldığı için arşivlenmiş bir sürüm haline geldiğini gösterir.
  • onDelete Bir nesne kalıcı olarak silindiğinde gönderilir. Bu, paketin yaşam döngüsü yapılandırmasının bir parçası olarak üzerine yazılan veya silinen nesneleri içerir. Nesne sürümü oluşturmanın etkin olduğu klasörler için, bu, bir nesne arşivlendiğinde gönderilmez (bkz. onArchive ), arşivleme storage.objects.delete yöntemi aracılığıyla gerçekleşse bile.
  • onFinalize Pakette 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 Mevcut 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 özniteliklerine erişin

Cloud Functions, güncellenen dosya için size ve contentType gibi bir dizi Cloud Storage nesne özniteliğini kullanıma sunar. 'Metajenerasyon' özniteliği, nesnenin meta verilerinde bir değişiklik olduğunda 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.

Küçük resim oluşturma örneği, işlevin döndürdüğü çı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, dosyaların Cloud Storage'dan indirilmesi gerekli olmayabilir. Ancak, Cloud Storage'da depolanan bir dosyadan küçük resim oluşturmak gibi yoğun görevleri gerçekleştirmek için, dosyaları işlevler örneğine, yani kodunuzu çalıştıran sanal makineye indirmeniz gerekir.

Nesneleri kolayca indirmek ve Cloud Storage'a yeniden yüklemek için npm install --save @google-cloud/storage kullanarak Google Cloud Storage paketini kurun ve içe aktarın. Örnekteki küçük resim işleme görevleri gibi harici işlemleri işlemek için JavaScript vaatlerini kullanmak için ayrıca import child-process-promise :

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp()
const path = require('path');

//library for resizing images
const sharp = require('sharp');

Cloud Functions örneğiniz üzerindeki 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örevler gerçekleştirirken, geri aramanızda bir JavaScript taahhüdü döndürdüğünüzden emin olun.

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

sharp gibi görüntü işleme programlarıyla birlikte Cloud Functions'ı kullanarak, grafik görüntü dosyaları üzerinde manipülasyonlar gerçekleştirebilirsiniz. Aşağıda, yüklenen bir resim dosyası için nasıl küçük resim oluşturulacağına 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 görüntü için 200x200 boyutunda bir küçük resim oluşturur ve ardından onu tekrar Bulut Depolama'ya 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ı gibi yaygın medya dönüştürme işlevlerine ilişkin daha fazla örnek. Örneklerin tam listesi GitHub'da mevcuttur.