Cloud Functions की मदद से Cloud Storage बढ़ाना


आपके पास अपलोड, अपडेट या Cloud Storage में से फ़ाइलें और फ़ोल्डर मिटाए जा रहे हैं.

इस पेज में दिए गए उदाहरण, सैंपल फ़ंक्शन पर आधारित हैं. यह फ़ंक्शन, इमेज को ट्रिगर करने पर ट्रिगर होता है फ़ाइलें Cloud Storage पर अपलोड की जाती हैं. यह सैंपल फ़ंक्शन दिखाता है कि इवेंट के एट्रिब्यूट ऐक्सेस करने का तरीका, Cloud Functions में फ़ाइल डाउनलोड करने का तरीका उदाहरण और Cloud Storage इवेंट को मैनेज करने से जुड़ी अन्य बुनियादी बातें.

इस्तेमाल के उदाहरणों के लिए, यहां देखें मैं Cloud Functions की मदद से क्या कर सकता/सकती हूं?

Cloud Storage बदलावों पर फ़ंक्शन ट्रिगर करें

functions.storage का इस्तेमाल करें एक ऐसा फ़ंक्शन बनाने के लिए जो Cloud Storage इवेंट. इस बात पर निर्भर करते हुए कि आप अपने किसी खास Cloud Storage बकेट के लिए फ़ंक्शन करें या डिफ़ॉल्ट का इस्तेमाल करें बकेट में, इनमें से किसी एक का इस्तेमाल करें:

उदाहरण के लिए, थंबनेल जनरेटर सैंपल का दायरा प्रोजेक्ट:

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

Cloud Storage में ये इवेंट इस्तेमाल किए जा सकते हैं:

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

onFinalize के लिए ऊपर दिखाए गए तरीके से, on इवेंट हैंडलर में इवेंट सेट करें.

Cloud Storage ऑब्जेक्ट एट्रिब्यूट को ऐक्सेस करें

Cloud Functions से कई Cloud Storage ऑब्जेक्ट एट्रिब्यूट दिखते हैं, जैसे कि जैसे 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.');
}

फ़ाइल डाउनलोड करना, पूरी तरह बदलना, और अपलोड करना

कुछ मामलों में, हो सकता है कि इससे फ़ाइलें डाउनलोड करना ज़रूरी न हो 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');

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

उदाहरण: इमेज ट्रांसफ़ॉर्मेशन

इमेज प्रोसेसिंग प्रोग्राम के साथ 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 पर उपलब्ध है.