Cloud Storage ফাইল ও ফোল্ডার আপলোড, আপডেট বা ডিলিট করার প্রতিক্রিয়ায় আপনি একটি ফাংশন চালু করতে পারেন।
Examples in this page are based on a sample function that triggers when image files are uploaded to Cloud Storage . This sample function demonstrates how to access event attributes, how to download a file to a Cloud Functions instance, and other fundamentals of handling Cloud Storage events.
ব্যবহারের আরও উদাহরণের জন্য, 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ইভেন্টটি শুধুমাত্র তখনই পাঠানো হয় যখন কোনো বাকেটে অবজেক্ট ভার্সনিং সক্রিয় করা থাকে। এই ইভেন্টটি নির্দেশ করে যে, কোনো অবজেক্টের লাইভ ভার্সনটি একটি আর্কাইভড ভার্সনে পরিণত হয়েছে; এর কারণ হতে পারে সেটিকে আর্কাইভ করা হয়েছে অথবা একই নামের অন্য কোনো অবজেক্ট আপলোড করার ফলে সেটি ওভাররাইট হয়ে গেছে। -
onDeleteSent when an object has been permanently deleted. This includes objects that are overwritten or are deleted as part of the bucket's lifecycle configuration . For buckets with object versioning enabled, this is not sent when an object is archived (seeonArchive), even if archival occurs via thestorage.objects.deletemethod. - যখন বাকেটে একটি নতুন অবজেক্ট (বা বিদ্যমান কোনো অবজেক্টের নতুন সংস্করণ) সফলভাবে তৈরি হয়, তখন
onFinalizeইভেন্টটি পাঠানো হয়। এর মধ্যে বিদ্যমান কোনো অবজেক্ট কপি করা বা পুনরায় লেখা অন্তর্ভুক্ত। একটি ব্যর্থ আপলোড এই ইভেন্টটি ট্রিগার করে না। - বিদ্যমান কোনো অবজেক্টের মেটাডেটা পরিবর্তিত হলে
onMetadataUpdateপাঠানো হয়।
উপরে onFinalize জন্য দেখানো পদ্ধতি অনুযায়ী on ইভেন্ট হ্যান্ডলারের মধ্যে ইভেন্টটি সেট করুন।
Cloud Storage অবজেক্ট অ্যাট্রিবিউট অ্যাক্সেস করুন
Cloud Functions exposes a number of Cloud Storage object attributes such as size and contentType for the file updated. The 'metageneration' attribute is incremented whenever there's a change to the object's metadata. For new objects, the metageneration value is 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 মেটাডেটা এক্সট্র্যাক্ট করা । উদাহরণগুলির সম্পূর্ণ তালিকা গিটহাবে পাওয়া যাবে।