Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

क्लाउड फ़ंक्शंस के साथ क्लाउड स्टोरेज बढ़ाएँ

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.

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

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

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

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

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

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

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

exports.generateThumbnail = 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.
const metageneration = object.metageneration; // Number of times metadata has been generated. New objects have a value of 1.

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

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

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

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

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

// 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});
functions.logger.log('Image downloaded locally to', tempFilePath);
// Generate a thumbnail using ImageMagick.
await spawn('convert', [tempFilePath, '-thumbnail', '200x200>', tempFilePath]);
functions.logger.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);

यह कोड एक अस्थायी निर्देशिका में सहेजी गई छवि के लिए 200x200 थंबनेल बनाने के लिए ImageMagick कमांड लाइन प्रोग्राम convert को निष्पादित करता है, फिर इसे क्लाउड स्टोरेज पर वापस अपलोड करता है।

और उदाहरण एक्सप्लोर करें

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

अधिक जानकारी के लिए पूर्ण Google क्लाउड संग्रहण ट्रिगर दस्तावेज़ देखें।