Cloud Storage'daki dosya ve klasörlerin yüklenmesi, güncellenmesi 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, etkinlik özelliklerine nasıl erişileceğini, bir dosyanın 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 örneği için bkz. Cloud Functions 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. İşlevinizin kapsamını belirli bir Cloud Storage paketine mi yoksa varsayılan paketi mi kullanmak istediğinize bağlı olarak aşağıdakilerden birini kullanın:
- Varsayılan Cloud Storage paketindeki nesne değişikliklerini dinlemek için
functions.storage.object()
. -
functions.storage.bucket('bucketName').object()
nesne değişikliklerini dinlemek içinfunctions.storage.bucket('bucketName').object()
.
Örneğin, küçük resim oluşturucu örneğinin kapsamı proje için varsayılan gruba ayarlanır:
exports.generateThumbnail = functions.storage.object().onFinalize(async (object) => { // ... });
Cloud Storage şu olayları destekler:
-
onArchive
Yalnızca bironArchive
, nesne sürümlemesini etkinleştirdiğinde gönderilir. Bu olay, bir nesnenin canlı sürümünün, arşivlendiği veya aynı adlı bir nesnenin yüklenmesi ile ü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ümlemenin etkin olduğuonArchive
, arşivlemestorage.objects.delete
yöntemi aracılığıyla gerçekleştirilse bile, bir nesne arşivlendiğinde (bkz.onArchive
) gönderilmez. -
onFinalize
yeni bir nesne (veya mevcut bir nesnenin yeni nesli) başarıyla oluşturulduğunda gönderilir. Bu, mevcut bir nesnenin kopyalanmasını veya yeniden yazılmasını içerir. Başarısız bir yükleme bu olayı tetiklemez. -
onMetadataUpdate
Mevcut bir nesnenin meta verileri değiştiğinde gönderilir.
İçinde olayı Set on
yukarıda gösterildiği gibi olay işleyicisi onFinalize
.
Cloud Storage nesne özelliklerine erişin
Cloud Functions, güncellenen dosya için size
ve contentType
gibi bir dizi Cloud Storage nesne özelliğini ortaya çıkarır. Nesnenin meta verilerinde bir değişiklik olduğunda "meta oluşturma " özelliğ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ı tespit etmek için bu özelliklerden bazılarını kullanır:
// Exit if this is triggered on a file that is not an image. if (!contentType.startsWith('image/')) { return console.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 console.log('Already a Thumbnail.'); }
Bir dosya indirin, dönüştürün ve yükleyin
Bazı durumlarda dosyaları Cloud Storage'dan 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 dosyaları işlev örneğine, yani kodunuzu çalıştıran sanal makineye indirmeniz gerekir.
Nesneleri Cloud Storage'a kolayca indirmek ve yeniden yüklemek için, Google Cloud Storage paketini npm install --save @google-cloud/storage
kullanarak npm install --save @google-cloud/storage
ve içe aktarın. Örnekteki küçük resim işleme görevleri gibi harici süreçleri işlemek için JavaScript vaatlerini kullanmak için, child-process-promise
de 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ğinizde 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 sözü verdiğinizden emin olun.
Örnek: görüntü dönüştürme
Cloud Functions, grafik görüntü dosyalarında işlem yapabilen ImageMagick
adlı bir görüntü işleme programı sağlar. Aşağıda, yüklenen bir görüntü dosyası için bir 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}); console.log('Image downloaded locally to', tempFilePath); // Generate a thumbnail using ImageMagick. await spawn('convert', [tempFilePath, '-thumbnail', '200x200>', tempFilePath]); console.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
Görüntüleri kod dönüştürme , içeriği denetleme , EXIF meta verilerini ayıklama dahil olmak üzere yaygın ortam dönüştürme işlevlerine ilişkin daha fazla örnek. Örneklerin tam listesi GitHub'da mevcuttur.
Daha fazla bilgi için tam Google Cloud Storage tetikleyici belgelerine bakın.