Cloud Storage में फ़ाइलें और फ़ोल्डर अपलोड करने, अपडेट करने या मिटाने पर, किसी फ़ंक्शन को Cloud Storageट्रिगर किया जा सकता है.
इस पेज में दिए गए उदाहरण, एक सैंपल फ़ंक्शन पर आधारित हैं. यह फ़ंक्शन, इमेज फ़ाइलें Cloud Storage पर अपलोड होने पर ट्रिगर होता है. इस सैंपल फ़ंक्शन से पता चलता है कि इवेंट एट्रिब्यूट को कैसे ऐक्सेस किया जाता है, Cloud Functions इंस्टेंस पर कोई फ़ाइल कैसे डाउनलोड की जाती है, और Cloud Storage इवेंट को मैनेज करने के अन्य बुनियादी तरीके क्या हैं.
इस्तेमाल के उदाहरणों के बारे में ज़्यादा जानने के लिए, की मदद से क्या किया जा सकता है लेख पढ़ें?Cloud Functions
Cloud Storage में बदलाव होने पर, किसी फ़ंक्शन को ट्रिगर करना
functions.storage
इवेंट को मैनेज करने वाला फ़ंक्शन बनाने के लिए,
Cloud 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यह सूचना तब भेजी जाती है, जब किसी ऑब्जेक्ट को हमेशा के लिए मिटा दिया जाता है. इसमें वे ऑब्जेक्ट शामिल हैं जिन्हें ओवरराइट किया गया है या बकेट के लाइफ़साइकल कॉन्फ़िगरेशन के तहत मिटाया गया है. जिन बकेट में ऑब्जेक्ट वर्शनिंग की सुविधा चालू है उनके लिए, किसी ऑब्जेक्ट को आर्काइव करने पर यह सूचना नहीं भेजी जाती. भले ही, आर्काइव करने की प्रोसेस,storage.objects.deleteतरीके से की गई हो.onArchiveदेखें.onFinalizeयह सूचना तब भेजी जाती है, जब बकेट में कोई नया ऑब्जेक्ट (या किसी मौजूदा ऑब्जेक्ट की नई जनरेशन) बन जाता है. इसमें किसी मौजूदा ऑब्जेक्ट को कॉपी करना या फिर से लिखना शामिल है. अपलोड करने में गड़बड़ी होने पर, यह इवेंट ट्रिगर नहीं होता.onMetadataUpdateयह सूचना तब भेजी जाती है, जब किसी मौजूदा ऑब्जेक्ट का मेटाडेटा बदलता है.
on इवेंट हैंडलर में, इवेंट को सेट करें. जैसा कि ऊपर onFinalize के लिए दिखाया गया है.
Cloud Storage ऑब्जेक्ट के एट्रिब्यूट ऐक्सेस करना
Cloud Functions कई ऑब्जेक्ट एट्रिब्यूट दिखाता है. जैसे, अपडेट की गई फ़ाइल के लिए size और contentType.Cloud Storage ऑब्जेक्ट के मेटाडेटा में बदलाव होने पर,
'metageneration'
एट्रिब्यूट की वैल्यू बढ़ जाती है. नए ऑब्जेक्ट के लिए, 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 पर फिर से अपलोड करने के लिए,
Google Cloud Storage
पैकेज को
npm install --save @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 प्रॉमिस को वापस किया हो.
उदाहरण: इमेज में बदलाव करना
Cloud Functions का इस्तेमाल, 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 पिक्सल का थंबनेल बनाता है. इसके बाद, उसे वापस Cloud Storage पर अपलोड कर देता है.
ज़्यादा उदाहरण देखें
मीडिया में बदलाव करने वाले सामान्य फ़ंक्शन के ज़्यादा उदाहरण. इनमें इमेज को ट्रांसकोड करना, कॉन्टेंट को मॉडरेट करना, EXIF मेटाडेटा निकालना शामिल है. उदाहरणों की पूरी सूची, GitHub पर उपलब्ध है.