Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Bulut Depolama tetikleyicileri

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.

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 functions.storage 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.generateThumbnail = 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 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.
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 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 spawn = require('child-process-promise').spawn;
const path = require('path');
const os = require('os');
const fs = require('fs');

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

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 nasıl küçük resim oluşturulacağına 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'lük bir küçük resim oluşturmak üzere ImageMagick komut satırı programı convert yürütür ve ardından onu tekrar Bulut Depolamaya 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.

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