Google is committed to advancing racial equity for Black communities. See how.
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Cloud Storage tetikleyicileri

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:

Ö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 bir onArchive , 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ğu onArchive , arşivleme storage.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.