Cloud Storage ट्रिगर


Cloud Storage में फ़ाइलों और फ़ोल्डर को अपलोड करने, अपडेट करने या मिटाने के जवाब में, फ़ंक्शन को ट्रिगर किया जा सकता है.

इस पेज पर दिए गए उदाहरण, सैंपल फ़ंक्शन के आधार पर दिए गए हैं. यह फ़ंक्शन, Cloud Storage में इमेज फ़ाइलें अपलोड किए जाने पर ट्रिगर होता है. इस सैंपल फ़ंक्शन में, इवेंट एट्रिब्यूट को ऐक्सेस करने का तरीका, Cloud Functions इंस्टेंस में फ़ाइल डाउनलोड करने का तरीका, और Cloud Storage इवेंट को मैनेज करने से जुड़ी अन्य बुनियादी बातें बताई गई हैं.

इस्तेमाल के और उदाहरणों के लिए, देखें Cloud Functions की मदद से क्या किया जा सकता है?

Cloud Storage में बदलाव करने पर फ़ंक्शन ट्रिगर करना

Cloud Storage इवेंट मैनेज करने वाला फ़ंक्शन बनाने के लिए, functions.storage का इस्तेमाल करें. आपको अपने फ़ंक्शन को किसी Cloud Storage बकेट में शामिल करना है या डिफ़ॉल्ट बकेट का इस्तेमाल करना है, इसके हिसाब से इनमें से कोई एक तरीका अपनाएं:

  • functions.storage.object() का इस्तेमाल करके, डिफ़ॉल्ट Cloud Storage बकेट पर ऑब्जेक्ट में हुए बदलावों को सुना जा सकता है.
  • किसी बकेट पर ऑब्जेक्ट में हुए बदलावों को सुनने के लिए, functions.storage.bucket('bucketName').object().

उदाहरण के लिए, थंबनेल जनरेटर सैंपल का दायरा प्रोजेक्ट के डिफ़ॉल्ट बकेट में होता है:

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

Cloud Storage में इन इवेंट का इस्तेमाल किया जा सकता है:

  • onArchive सिर्फ़ तब भेजा जाता है, जब किसी बकेट के ज़रिए ऑब्जेक्ट वर्शन चालू किया जाता है. इस इवेंट से पता चलता है कि किसी ऑब्जेक्ट का लाइव वर्शन संग्रहित वर्शन बन गया है. इसकी वजह यह हो सकती है कि उसे संग्रहित कर लिया गया हो या उसी नाम के किसी ऑब्जेक्ट को अपलोड करने की वजह से उसे ओवरराइट कर दिया गया हो.
  • onDelete यह सूचना तब भेजी जाती है, जब किसी ऑब्जेक्ट को हमेशा के लिए मिटा दिया गया हो. इसमें बकेट के लाइफ़साइकल कॉन्फ़िगरेशन के हिस्से के तौर पर, ओवरराइट किए गए या मिटाए गए ऑब्जेक्ट शामिल हैं. ऑब्जेक्ट वर्शन की सुविधा वाले बकेट के लिए, यह ऑब्जेक्ट संग्रहित किए जाने पर नहीं भेजा जाता (onArchive देखें). भले ही, storage.objects.delete तरीके से डेटा संग्रहित किया गया हो.
  • onFinalize यह तब भेजा जाता है, जब बकेट में कोई नया ऑब्जेक्ट या किसी मौजूदा ऑब्जेक्ट की नई जनरेशन बन जाती है. इसमें किसी मौजूदा ऑब्जेक्ट को कॉपी करना या उसे फिर से लिखना शामिल है. अपलोड न होने से यह इवेंट ट्रिगर नहीं होता.
  • onMetadataUpdate यह सूचना किसी मौजूदा ऑब्जेक्ट के मेटाडेटा में बदलाव होने पर भेजी जाती है.

onFinalize के लिए ऊपर दिखाए गए तरीके से, on इवेंट हैंडलर में इवेंट सेट करें.

Cloud Storage ऑब्जेक्ट एट्रिब्यूट को ऐक्सेस करें

Cloud Functions, अपडेट की गई फ़ाइल के लिए size और contentType जैसे कई Cloud Storage ऑब्जेक्ट एट्रिब्यूट दिखाता है. जब भी ऑब्जेक्ट के मेटाडेटा में बदलाव किया जाता है, तब 'meta generation' एट्रिब्यूट की वैल्यू बढ़ जाती है. नए ऑब्जेक्ट के लिए, metageneration की वैल्यू 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.

थंबनेल जनरेट करने वाला सैंपल, यहां दिए गए कुछ एट्रिब्यूट का इस्तेमाल करके, ऐसे एग्ज़िट केस का पता लगाता है जिनमें फ़ंक्शन फ़ंक्शन दिखाता है:

// 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.');
}

फ़ाइल डाउनलोड करना, पूरी तरह बदलना, और अपलोड करना

कुछ मामलों में, हो सकता है कि Cloud Storage से फ़ाइलें डाउनलोड करना ज़रूरी न हो. हालांकि, Cloud Storage में सेव की गई किसी फ़ाइल से थंबनेल इमेज जनरेट करने जैसे बहुत ज़्यादा काम करने के लिए, आपको फ़ंक्शन इंस्टेंस में फ़ाइलें डाउनलोड करनी होंगी—यानी, आपका कोड चलाने वाली वर्चुअल मशीन.

ऑब्जेक्ट को आसानी से Cloud Storage में डाउनलोड और फिर से अपलोड करने के लिए, npm install --save @google-cloud/storage का इस्तेमाल करके Google Cloud Storage पैकेज इंस्टॉल करें और उसे इंपोर्ट करें. अगर आपको JavaScript के प्रॉमिस का इस्तेमाल करके, सैंपल में थंबनेल प्रोसेस करने के टास्क जैसी बाहरी प्रोसेस को मैनेज करना है, तो child-process-promise को भी इंपोर्ट करें:

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');

अपने Cloud Functions इंस्टेंस पर अस्थायी डायरेक्ट्री में फ़ाइल डाउनलोड करने के लिए, gcs.bucket.file(filePath).download का इस्तेमाल करें. इस जगह पर, ज़रूरत के हिसाब से फ़ाइल को प्रोसेस किया जा सकता है. इसके बाद, Cloud Storage में उसे अपलोड किया जा सकता है. एसिंक्रोनस टास्क करते समय, पक्का करें कि आपके कॉलबैक में JavaScript का प्रॉमिस प्रॉमिस हो.

उदाहरण: इमेज ट्रांसफ़ॉर्मेशन

sharp जैसे इमेज प्रोसेसिंग प्रोग्राम के साथ-साथ Cloud Functions का इस्तेमाल करके, आप ग्राफ़िक वाली इमेज फ़ाइलों पर हेर-फेर कर सकते हैं. नीचे दी गई इमेज में, अपलोड की गई इमेज फ़ाइल के लिए थंबनेल इमेज बनाने का तरीका बताया गया है:

// 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!");

यह कोड, कुछ समय के लिए सेव की गई डायरेक्ट्री में सेव की गई इमेज के लिए, 200x200 पिक्सल का थंबनेल बनाता है. इसके बाद, उसे वापस Cloud Storage में अपलोड कर दिया जाता है.

ज़्यादा उदाहरण देखें

मीडिया ट्रांसफ़ॉर्मेशन के सामान्य फ़ंक्शन के और उदाहरण. इनमें इमेज को ट्रांसकोड करना, कॉन्टेंट मॉडरेट करना, EXIF मेटाडेटा हटाना शामिल है. उदाहरणों की पूरी सूची, GitHub पर उपलब्ध है.