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আগে থেকে থাকা কোনও অবজেক্টের মেটাডেটা পরিবর্তন হলে পাঠানো হয়।
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 { 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'));
আপনার Cloud Functions ইনস্ট্যান্সে সাময়িক
ডিরেক্টরিতে ফাইল ডাউনলোড করতে gcs.bucket.file(filePath).download ব্যবহার করুন। এই লোকেশনে, আপনি
প্রয়োজন অনুযায়ী ফাইল প্রসেস করতে এবং তারপরে Cloud Storage-এ আপলোড করতে পারবেন। অ্যাসিঙ্ক্রোনাস টাস্ক
পারফর্ম করার সময়, আপনার
কলব্যাকে জাভাস্ক্রিপ্ট প্রমিস রিটার্ন করতে ভুলবেন না।
যেমন: ইমেজ ট্রান্সফর্মেশন
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!");
এই কোডটি একটি অস্থায়ী ডিরেক্টরিতে সেভ করা ছবির জন্য ২০০x২০০ থাম্বনেল তৈরি করে, তারপর এটি Cloud Storage-এ আপলোড করে।
আরও উদাহরণ এক্সপ্লোর করুন
সাধারণ মিডিয়া ট্রান্সফর্মেশন ফাংশনের আরও উদাহরণ, যার মধ্যে রয়েছে ইমেজ ট্রান্সকোডিং, কন্টেন্ট মডারেশন, EXIF মেটাডেটা এক্সট্র্যাক্ট করা। উদাহরণগুলির সম্পূর্ণ তালিকা GitHub-এ উপলভ্য।