Cloud Storage'te dosya ve klasörlerin yüklenmesi, güncellenmesi veya silinmesine yanıt olarak bir işlevi tetikleyebilirsiniz.
Bu sayfadaki örnekler, resim dosyaları Cloud Storage alanına yüklendiğinde tetiklenen örnek bir işleve dayanır. Bu örnek işlevde, etkinlik özelliklerine nasıl erişileceği, bir dosyanın Cloud Functions örneğine nasıl indirileceği ve Cloud Storage etkinliklerini işlemeyle ilgili diğer temel bilgiler gösterilmektedir.
Kullanım alanı örnekleri için Cloud Functions ile neler yapabilirim? başlıklı makaleyi inceleyin.
Cloud Storage değişikliklerinde bir işlevi tetikleyin
Cloud Storage etkinliklerini işleyen bir işlev oluşturmak için functions.storage
öğesini kullanın. İşlevinizi belirli bir Cloud Storage paketiyle mi yoksa varsayılan paketle mi kapsamaya almak 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()
Örneğin, küçük resim oluşturucu örneği, projenin varsayılan paketi için kapsamlandırılmıştır:
exports.firstGenGenerateThumbnail = functions.storage.object().onFinalize(async (object) => { // ... });
Cloud Storage şu etkinlikleri destekler:
onArchive
Yalnızca bir pakette nesne sürümü oluşturma etkinleştirildiğinde gönderilir. Bu etkinlik, bir nesnenin canlı sürümünün, ya arşivlendiği ya da aynı ada sahip bir nesne yüklemesi ile üzerine yazıldığı için arşivlenmiş bir sürüm haline geldiğini belirtir.onDelete
Bir nesne kalıcı olarak silindiğinde gönderilir. Üzerine yazılan veya paketin yaşam döngüsü yapılandırması kapsamında silinen nesneleri içerir. Nesnede sürüm oluşturma özelliğinin etkinleştirildiği paketlerde, arşivlemestorage.objects.delete
yöntemiyle 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. Bu, mevcut bir nesnenin kopyalanmasını veya yeniden yazılmasını içerir. Başarısız olan bir yükleme, bu etkinliği tetiklemez.onMetadataUpdate
Mevcut bir nesnenin meta verileri değiştiğinde gönderilir.
Etkinliği, onFinalize
için yukarıda gösterildiği gibi on
etkinlik işleyici içinde ayarlayın.
Cloud Storage nesne özelliklerine erişme
Cloud Functions, güncellenen dosya için size
ve contentType
gibi bir dizi Cloud Storage nesne özelliğini sunar. "metageneration" özelliği, nesnenin meta verilerinde her değişiklik yapıldığında artırılır. Yeni nesneler için metageneration
değeri 1
'dur.
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 döndürdüğü çıkış durumlarını algılamak için bu özelliklerin 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'ten dosya indirmeniz gerekmeyebilir. Bununla birlikte, Cloud Storage hizmetinde depolanan bir dosyadan küçük resim oluşturma 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'e kolayca indirip yeniden yüklemek için npm install --save @google-cloud/storage
'i kullanarak Google Cloud Storage
paketini yükleyin ve içe aktarın. Örnekteki küçük resim işleme görevleri gibi harici işlemleri yönetmek için JavaScript taahhütlerini kullanmak istiyorsanız child-process-promise
dosyasını da 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');
Bir dosyayı Cloud Functions örneğinizdeki geçici bir dizine indirmek için gcs.bucket.file(filePath).download
'ü kullanın. Bu konumda, dosyayı gerektiği gibi işleyebilir ve ardından Cloud Storage'e yükleyebilirsiniz. Eşzamansız görevleri gerçekleştirirken, geri çağırmanızda bir JavaScript taahhüdünü döndürdüğünüzden emin olun.
Örnek: resim dönüştürme
Cloud Functions'ü sharp
gibi resim işleme programlarıyla birlikte kullanarak grafik resim dosyalarında işlem yapabilirsiniz. Aşağıda, yüklenen bir resim dosyası için küçük resim oluşturma örneği 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 resim için 200x200 boyutunda bir küçük resim oluşturur ve ardından bu resmi Cloud Storage ürününe yükler.
Diğer örnekleri keşfedin
Görüntülerin kodunu dönüştürme, içerikleri denetleme, EXIF meta verilerini çıkarma gibi yaygın medya dönüştürme işlevlerine ilişkin diğer örneklere göz atabilirsiniz. Örneklerin tam listesini GitHub'da bulabilirsiniz.