ক্লাউড স্টোরেজ ট্রিগার (1ম প্রজন্ম)

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

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

ব্যবহারের আরও উদাহরণের জন্য, Cloud Functions দিয়ে আমি কী করতে পারি? দেখুন।

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

Cloud Storage ইভেন্ট পরিচালনা করে এমন একটি ফাংশন তৈরি করতে functions.storage ব্যবহার করুন। আপনি আপনার ফাংশনটিকে একটি নির্দিষ্ট Cloud Storage বাকেটের মধ্যে সীমাবদ্ধ করতে চান নাকি ডিফল্ট বাকেট ব্যবহার করতে চান তার উপর নির্ভর করে, নিম্নলিখিতগুলির মধ্যে একটি ব্যবহার করুন:

  • ডিফল্ট Cloud Storage বাকেটে অবজেক্টের পরিবর্তনগুলি শোনার জন্য functions.storage.object() টিপুন।
  • functions.storage.bucket('bucketName').object() একটি নির্দিষ্ট বাকেটে বস্তুর পরিবর্তন শোনার জন্য।

উদাহরণস্বরূপ, থাম্বনেইল জেনারেটরের নমুনাটি প্রকল্পের জন্য ডিফল্ট বাকেটের সাথে সংযুক্ত করা হয়েছে:

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 আপলোড করতে পারেন। অ্যাসিঙ্ক্রোনাস কাজগুলি সম্পাদন করার সময়, আপনার কলব্যাকে একটি জাভাস্ক্রিপ্ট প্রতিশ্রুতি ফেরত দিতে ভুলবেন না।

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

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-এ পাওয়া যাবে।