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şlevi temel alır. Bu örnek işlev, olay özniteliklerine nasıl erişileceğini, bir dosyanın Cloud Functions örneğine nasıl indirileceğini ve Cloud Storage olaylarını işlemeye ilişkin diğer temelleri gösterir.

Daha fazla kullanım örneği örneği için bkz. Bulut İşlevleri ile neler 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 paketine mi ayarlamak istediğinize veya varsayılan paketi mi kullanmak istediğinize bağlı olarak aşağıdakilerden birini kullanın:

Örneğin, küçük resim oluşturucu örneğinin kapsamı projenin varsayılan paketine göre belirlenir:

exports.firstGenGenerateThumbnail = 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şivlenmiş olması veya aynı adlı bir nesnenin yüklenmesiyle üzerine yazılması nedeniyle 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 paketler için, arşivleme storage.objects.delete yöntemi aracılığıyla 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. Buna mevcut bir nesnenin kopyalanması veya yeniden yazılması da dahildir. Başarısız bir yükleme bu olayı tetiklemez.
  • onMetadataUpdate Mevcut bir nesnenin meta verileri değiştiğinde gönderilir.

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

Cloud Storage nesne niteliklerine erişme

Cloud Functions, güncellenen dosya için size ve contentType gibi bir dizi Cloud Storage nesne niteliğini kullanıma sunar. 'Metajenerasyon' özelliğ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 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.');
}

Dosya indirme, dönüştürme ve yükleme

Bazı durumlarda Cloud Storage'dan dosya indirmeniz gerekmeyebilir. Ancak Bulut Depolama'da depolanan bir dosyadan küçük resim görüntüsü 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 Cloud Storage'a kolayca indirip yeniden yüklemek için npm install --save @google-cloud/storage komutunu 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 yönetmeye yönelik JavaScript vaatlerini kullanmak için aynı zamanda child-process-promise 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ı 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üşümü

Cloud Functions'ı sharp gibi görüntü işleme programlarıyla birlikte kullanarak grafik görüntü dosyaları üzerinde manipülasyonlar gerçekleştirebilirsiniz. Aşağıda, yüklenen bir resim dosyası için küçük resim resminin nasıl oluşturulacağına ilişkin 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 bunu Cloud Storage'a geri yükler.

Daha fazla örneği keşfedin

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