ক্লাউড স্টোরেজ ট্রিগার


আপনি Cloud Storage ফাইল এবং ফোল্ডার আপলোড, আপডেট বা মুছে ফেলার প্রতিক্রিয়া হিসাবে একটি ফাংশন ট্রিগার করতে পারেন।

এই পৃষ্ঠার উদাহরণগুলি একটি নমুনা ফাংশনের উপর ভিত্তি করে যা Cloud Storage চিত্র ফাইলগুলি আপলোড করার সময় ট্রিগার করে৷ এই নমুনা ফাংশনটি দেখায় কিভাবে ইভেন্ট অ্যাট্রিবিউট অ্যাক্সেস করতে হয়, কীভাবে একটি Cloud Functions ইনস্ট্যান্সে একটি ফাইল ডাউনলোড করতে হয় এবং Cloud Storage ইভেন্টগুলি পরিচালনা করার অন্যান্য মৌলিক বিষয়গুলি।

ব্যবহারের ক্ষেত্রে আরও উদাহরণের জন্য, Cloud Functions সাথে আমি কী করতে পারি?

Cloud Storage পরিবর্তনে একটি ফাংশন ট্রিগার করুন

Cloud Storage ইভেন্ট পরিচালনা করে এমন একটি ফাংশন তৈরি করতে functions.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 আপডেট করা ফাইলের size এবং contentType মতো অনেকগুলি Cloud Storage অবজেক্টের বৈশিষ্ট্য প্রকাশ করে। যখনই অবজেক্টের মেটাডেটাতে কোনো পরিবর্তন হয় তখন 'মেটাজেনারেশন' অ্যাট্রিবিউট বাড়ানো হয়। নতুন বস্তুর জন্য, 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 প্যাকেজ ইনস্টল করুন এবং এটি আমদানি করুন৷ জাভাস্ক্রিপ্ট ব্যবহার করার জন্য নমুনায় থাম্বনেইল প্রসেসিং কাজগুলির মতো বাহ্যিক প্রক্রিয়াগুলি পরিচালনা করার প্রতিশ্রুতি, 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 আপলোড করতে পারেন। অ্যাসিঙ্ক্রোনাস কাজ সম্পাদন করার সময়, নিশ্চিত করুন যে আপনি আপনার কলব্যাকে একটি জাভাস্ক্রিপ্ট প্রতিশ্রুতি ফেরত দিয়েছেন।

উদাহরণ: চিত্র রূপান্তর

sharp মতো ইমেজ-প্রসেসিং প্রোগ্রামের সাথে একসাথে Cloud Functions ব্যবহার করে, আপনি গ্রাফিকাল ইমেজ ফাইলে ম্যানিপুলেশন করতে পারেন। একটি আপলোড করা ইমেজ ফাইলের জন্য একটি থাম্বনেইল ইমেজ কিভাবে তৈরি করতে হয় তার একটি উদাহরণ নিচে দেওয়া হল:

// 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 এ উপলব্ধ।

,


আপনি Cloud Storage ফাইল এবং ফোল্ডার আপলোড, আপডেট বা মুছে ফেলার প্রতিক্রিয়া হিসাবে একটি ফাংশন ট্রিগার করতে পারেন।

এই পৃষ্ঠার উদাহরণগুলি একটি নমুনা ফাংশনের উপর ভিত্তি করে যা Cloud Storage চিত্র ফাইলগুলি আপলোড করার সময় ট্রিগার করে৷ এই নমুনা ফাংশনটি দেখায় কিভাবে ইভেন্ট অ্যাট্রিবিউট অ্যাক্সেস করতে হয়, কীভাবে একটি Cloud Functions ইনস্ট্যান্সে একটি ফাইল ডাউনলোড করতে হয় এবং Cloud Storage ইভেন্টগুলি পরিচালনা করার অন্যান্য মৌলিক বিষয়গুলি।

ব্যবহারের ক্ষেত্রে আরও উদাহরণের জন্য, Cloud Functions সাথে আমি কী করতে পারি?

Cloud Storage পরিবর্তনে একটি ফাংশন ট্রিগার করুন

Cloud Storage ইভেন্ট পরিচালনা করে এমন একটি ফাংশন তৈরি করতে functions.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 আপডেট করা ফাইলের size এবং contentType মতো অনেকগুলি Cloud Storage অবজেক্টের বৈশিষ্ট্য প্রকাশ করে। যখনই অবজেক্টের মেটাডেটাতে কোনো পরিবর্তন হয় তখন 'মেটাজেনারেশন' অ্যাট্রিবিউট বাড়ানো হয়। নতুন বস্তুর জন্য, 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 প্যাকেজ ইনস্টল করুন এবং এটি আমদানি করুন৷ জাভাস্ক্রিপ্ট ব্যবহার করার জন্য নমুনায় থাম্বনেইল প্রসেসিং কাজগুলির মতো বাহ্যিক প্রক্রিয়াগুলি পরিচালনা করার প্রতিশ্রুতি, 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 আপলোড করতে পারেন। অ্যাসিঙ্ক্রোনাস কাজ সম্পাদন করার সময়, নিশ্চিত করুন যে আপনি আপনার কলব্যাকে একটি জাভাস্ক্রিপ্ট প্রতিশ্রুতি ফেরত দিয়েছেন।

উদাহরণ: চিত্র রূপান্তর

sharp মতো ইমেজ-প্রসেসিং প্রোগ্রামের সাথে একসাথে Cloud Functions ব্যবহার করে, আপনি গ্রাফিকাল ইমেজ ফাইলে ম্যানিপুলেশন করতে পারেন। একটি আপলোড করা ইমেজ ফাইলের জন্য একটি থাম্বনেইল ইমেজ কিভাবে তৈরি করতে হয় তার একটি উদাহরণ নিচে দেওয়া হল:

// 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 এ উপলব্ধ।