Catch up on everthing we announced at this year's Firebase Summit. Learn more

क्लाउड स्टोरेज ट्रिगर

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

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

उपयोग के मामलों की अधिक उदाहरणों के लिए, मैं बादल कार्य के साथ क्या कर सकते हैं?

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

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

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

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

क्लाउड स्टोरेज इन घटनाओं का समर्थन करता है:

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

भीतर घटना सेट on के रूप में के लिए ऊपर दिखाए गए ईवेंट हैंडलर onFinalize

क्लाउड स्टोरेज ऑब्जेक्ट विशेषताओं तक पहुंचें

बादल कार्य क्लाउड संग्रहण वस्तु की एक संख्या के रूप में विशेषताओं को उजागर करता है 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.
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.');
}

फ़ाइल डाउनलोड करें, रूपांतरित करें और अपलोड करें

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

Cloud Storage पर आसानी से डाउनलोड करने और फिर से अपलोड वस्तुओं के लिए, स्थापित करें Google क्लाउड संग्रहण पैकेज का उपयोग कर npm install --save @google-cloud/storage , और यह आयात करते हैं। नमूने में थंबनेल प्रोसेसिंग कार्यों, भी आयात की तरह बाहरी प्रक्रियाओं को संभालने के लिए जावास्क्रिप्ट वादों का उपयोग करने के 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);

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

और उदाहरण देखें

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

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