Google, Siyah topluluklar için ırksal eşitliği ilerletmeye kararlıdır. Nasıl olduğunu gör.
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

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, resim dosyaları Cloud Storage'a yüklendiğinde tetiklenen örnek bir işleve dayanmaktadı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ı yönetmenin diğer temel özelliklerini gösterir.

Kullanım örneklerine daha fazla örnek için bkz. Bulut İşlevleri ile ne yapabilirim?

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

Kullanım functions.storage kolları Bulut Depolama olaylar olduğu bir işlev oluşturun. İşlevinizi belirli bir Bulut Depolama grubuna dahil etmek veya varsayılan grup kullanmak isteyip istemediğinize bağlı olarak aşağıdakilerden birini kullanın:

Örneğin, küçük resim oluşturucu örneği proje için varsayılan gruba dahil edilir:

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

Cloud Storage şu etkinlikleri destekler:

  • onArchive Yalnızca bir grup nesne onArchive etkinleştirdiğinde gönderilir. Bu olay, bir nesnenin canlı sürümünün, arşivlendiğinden veya aynı adlı bir nesnenin yüklenmesi ile üzerine yazıldığından arşivlenmiş bir sürüm haline geldiğini gösterir.
  • onDelete Bir nesne kalıcı olarak silindiğinde gönderilir. Bu, üzerine yazılan veya grubun yaşam döngüsü yapılandırmasının bir parçası olarak silinen nesneleri içerir. İle kovalar için nesnenin sürümlendirmesini etkin bir nesne (bkz arşivlenirse, bu gönderilmez onArchive arşiv aracılığıyla gerçekleşse bile) storage.objects.delete yöntemiyle.
  • onFinalize yeni bir nesne (veya var olan 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 etkinliği tetiklemez.
  • onMetadataUpdate Mevcut bir nesnenin meta verileri değiştiğinde gönderilir.

Olayı, onFinalize için yukarıda gösterildiği gibi on olay işleyicisinde onFinalize .

Depolama nesnesi özniteliklerine erişin

Bulut İşlevleri, güncellenen dosya için size ve contentType gibi bir dizi Depolama nesnesi özniteliği ortaya koyar. Nesnenin meta verilerinde bir değişiklik olduğunda 'metageneration' ö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 döndüğü çıkış durumlarını algılamak 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.');
}

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

Bazı durumlarda, Cloud Storage'dan dosya 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 npm install --save @google-cloud/storage kullanarak Google Cloud Storage paketini npm install --save @google-cloud/storage ve içe aktarın. Örnekteki küçük resim işleme görevleri gibi harici işlemleri işlemek için JavaScript vaatlerini kullanmak üzere 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 dosyasını 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 çağrınızda bir JavaScript sözü döndürdüğünüzden emin olun.

Örnek: görüntü dönüşümü

Bulut İşlevleri, grafik görüntü dosyalarında manipülasyonlar gerçekleştirebilen ImageMagick adlı bir görüntü işleme programı sağlar. Yüklenen bir görüntü dosyası için nasıl küçük resim oluşturulacağının bir örneği aşağıdadır:

// 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, geçici bir dizine kaydedilen görüntü için 200x200 küçük resim oluşturmak üzere ImageMagick komut satırı program convert yürütür ve ardından tekrar Cloud Storage'a yükler.

Daha fazla örnek keşfedin

Görüntüleri kod dönüştürme , içeriği denetleme , EXIF meta verilerini çıkarma gibi yaygın medya dönüştürme işlevlerine daha fazla örnek. Örneklerin tam listesi GitHub'da bulunabilir.

Daha fazla bilgi için Google Cloud Storage tetikleyici belgelerinin tamamına bakın.