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
यह सूचना तब भेजी जाती है, जब किसी ऑब्जेक्ट को हमेशा के लिए मिटा दिया जाता है. इसमें वे ऑब्जेक्ट शामिल हैं जिन्हें बकेट के लाइफ़साइकल कॉन्फ़िगरेशन के तहत बदला गया है या मिटाया गया है. जिन बकेट के लिए ऑब्जेक्ट वर्शनिंग चालू है उनमें, किसी ऑब्जेक्ट को संग्रहित करने पर यह सूचना नहीं भेजी जाती (onArchive
देखें). भले ही, संग्रह करने की प्रोसेसstorage.objects.delete
तरीके से की गई हो.onFinalize
यह सूचना तब भेजी जाती है, जब बकेट में कोई नया ऑब्जेक्ट (या मौजूदा ऑब्जेक्ट का नया वर्शन) बन जाता है. इसमें किसी मौजूदा ऑब्जेक्ट को कॉपी करना या फिर से लिखना शामिल है. अपलोड न होने पर, यह इवेंट ट्रिगर नहीं होता.onMetadataUpdate
किसी मौजूदा ऑब्जेक्ट के मेटाडेटा में बदलाव होने पर भेजा जाता है.
on
के लिए, ऊपर दिखाए गए तरीके से on
इवेंट हैंडलर में इवेंट सेट करें.onFinalize
Cloud Storage ऑब्जेक्ट एट्रिब्यूट ऐक्सेस करना
Cloud Functions, अपडेट की गई फ़ाइल के लिए कई Cloud Storage ऑब्जेक्ट एट्रिब्यूट दिखाता है. जैसे, size
और contentType
. ऑब्जेक्ट के मेटाडेटा में बदलाव होने पर, '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 में ऑब्जेक्ट आसानी से डाउनलोड और फिर से अपलोड करने के लिए, 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');
gcs.bucket.file(filePath).download
का इस्तेमाल करके, अपनी Cloud Functions इंस्टेंस पर मौजूद किसी फ़ाइल को कुछ समय के लिए सेव की जाने वाली डायरेक्ट्री में डाउनलोड करें. इस जगह पर, फ़ाइल को अपनी ज़रूरत के हिसाब से प्रोसेस किया जा सकता है. इसके बाद, इसे 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 पर उपलब्ध है.