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यह सूचना तब भेजी जाती है, जब किसी मौजूदा ऑब्जेक्ट के मेटाडेटा में बदलाव होता है.
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 { initializeApp } = require('firebase-admin/app'); const { getStorage } = require('firebase-admin/storage'); initializeApp(); const path = require('path'); //library for resizing images const sharp = /** @type {typeof import('sharp')} */ (require('sharp'));
gcs.bucket.file(filePath).download का इस्तेमाल करके, अपने Cloud Functions इंस्टेंस पर किसी अस्थायी डायरेक्ट्री में फ़ाइल डाउनलोड करें. इस जगह पर, ज़रूरत के हिसाब से फ़ाइल को प्रोसेस किया जा सकता है. इसके बाद, उसे Cloud Storage पर अपलोड किया जा सकता है. एसिंक्रोनस टास्क करते समय, पक्का करें कि आपने कॉलबैक में JavaScript प्रॉमिस को रिटर्न किया हो.
उदाहरण: इमेज को वीडियो में बदलना
Cloud Functions का इस्तेमाल sharp जैसे इमेज-प्रोसेसिंग प्रोग्राम के साथ करके, ग्राफ़िकल इमेज फ़ाइलों में बदलाव किए जा सकते हैं. अपलोड की गई इमेज फ़ाइल के लिए थंबनेल इमेज बनाने का तरीका यहां बताया गया है:
// Download file from bucket. const bucket = getStorage().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 पर उपलब्ध है.