क्लाउड स्टोरेज ट्रिगर


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

इस पृष्ठ के उदाहरण एक नमूना फ़ंक्शन पर आधारित हैं जो क्लाउड स्टोरेज पर छवि फ़ाइलें अपलोड होने पर ट्रिगर होता है। यह नमूना फ़ंक्शन दर्शाता है कि ईवेंट विशेषताओं तक कैसे पहुंचें, क्लाउड फ़ंक्शंस इंस्टेंस में फ़ाइल कैसे डाउनलोड करें, और क्लाउड स्टोरेज ईवेंट को संभालने के अन्य बुनियादी सिद्धांत।

उपयोग के मामलों के अधिक उदाहरणों के लिए, मैं क्लाउड फ़ंक्शंस के साथ क्या कर सकता हूं? देखें।

क्लाउड स्टोरेज परिवर्तनों पर एक फ़ंक्शन ट्रिगर करें

क्लाउड स्टोरेज इवेंट को संभालने वाला फ़ंक्शन बनाने के लिए functions.storage का उपयोग करें। इस पर निर्भर करते हुए कि आप अपने फ़ंक्शन को किसी विशिष्ट क्लाउड स्टोरेज बकेट तक सीमित करना चाहते हैं या डिफ़ॉल्ट बकेट का उपयोग करना चाहते हैं, निम्न में से किसी एक का उपयोग करें:

  • डिफ़ॉल्ट क्लाउड स्टोरेज बकेट पर ऑब्जेक्ट परिवर्तनों को सुनने के लिए functions.storage.object()
  • functions.storage.bucket('bucketName').object() किसी विशिष्ट बकेट पर ऑब्जेक्ट परिवर्तनों को सुनने के लिए।

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

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

क्लाउड स्टोरेज इन घटनाओं का समर्थन करता है:

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

जैसा कि onFinalize के लिए ऊपर दिखाया गया है, इवेंट को on इवेंट हैंडलर के भीतर सेट करें।

क्लाउड स्टोरेज ऑब्जेक्ट विशेषताओं तक पहुंचें

क्लाउड फ़ंक्शंस अपडेट की गई फ़ाइल के लिए size और contentType जैसी कई क्लाउड स्टोरेज ऑब्जेक्ट विशेषताओं को उजागर करता है। जब भी ऑब्जेक्ट के मेटाडेटा में कोई परिवर्तन होता है तो 'मेटाजेनरेशन' विशेषता बढ़ जाती है। नई वस्तुओं के लिए, 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.');
}

फ़ाइल डाउनलोड करें, रूपांतरित करें और अपलोड करें

कुछ मामलों में, क्लाउड स्टोरेज से फ़ाइलें डाउनलोड करना आवश्यक नहीं हो सकता है। हालाँकि, क्लाउड स्टोरेज में संग्रहीत फ़ाइल से थंबनेल छवि उत्पन्न करने जैसे गहन कार्य करने के लिए, आपको फ़ंक्शंस इंस्टेंस पर फ़ाइलें डाउनलोड करने की आवश्यकता होती है - अर्थात, वर्चुअल मशीन जो आपका कोड चलाती है।

क्लाउड स्टोरेज पर ऑब्जेक्ट को आसानी से डाउनलोड करने और पुनः अपलोड करने के लिए, npm install --save @google-cloud/storage का उपयोग करके Google क्लाउड स्टोरेज पैकेज इंस्टॉल करें और इसे आयात करें। नमूने में थंबनेल प्रसंस्करण कार्यों जैसी बाहरी प्रक्रियाओं को संभालने के लिए जावास्क्रिप्ट वादों का उपयोग करने के लिए, 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');

अपने क्लाउड फ़ंक्शंस इंस्टेंस पर एक अस्थायी निर्देशिका में फ़ाइल डाउनलोड करने के लिए gcs.bucket.file(filePath).download उपयोग करें। इस स्थान पर, आप आवश्यकतानुसार फ़ाइल को संसाधित कर सकते हैं और फिर क्लाउड स्टोरेज पर अपलोड कर सकते हैं। अतुल्यकालिक कार्य करते समय, सुनिश्चित करें कि आप अपने कॉलबैक में एक जावास्क्रिप्ट वादा लौटाएँ।

उदाहरण: छवि परिवर्तन

sharp जैसे इमेज-प्रोसेसिंग प्रोग्राम के साथ क्लाउड फ़ंक्शंस का उपयोग करके, आप ग्राफ़िकल छवि फ़ाइलों पर हेरफेर कर सकते हैं। अपलोड की गई छवि फ़ाइल के लिए थंबनेल छवि बनाने का एक उदाहरण निम्नलिखित है:

// 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 थंबनेल बनाता है, फिर इसे क्लाउड स्टोरेज पर वापस अपलोड करता है।

अधिक उदाहरण खोजें

छवियों को ट्रांसकोड करना , सामग्री को मॉडरेट करना , EXIF ​​मेटाडेटा निकालना सहित सामान्य मीडिया परिवर्तन कार्यों के अधिक उदाहरण। उदाहरणों की पूरी सूची GitHub पर उपलब्ध है।