আপনি 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 আপডেট করা ফাইলের 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 বালতিতে আপনার ফাংশন স্কোপ করতে চান বা ডিফল্ট বালতি ব্যবহার করতে চান কিনা তার উপর নির্ভর করে, নিম্নলিখিতগুলির মধ্যে একটি ব্যবহার করুন:
-
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 আপডেট করা ফাইলের 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 বালতিতে আপনার ফাংশন স্কোপ করতে চান বা ডিফল্ট বালতি ব্যবহার করতে চান কিনা তার উপর নির্ভর করে, নিম্নলিখিতগুলির মধ্যে একটি ব্যবহার করুন:
-
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 আপডেট করা ফাইলের 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 বালতিতে আপনার ফাংশনটি স্কোপ করতে চান বা ডিফল্ট বালতি ব্যবহার করতে চান তার উপর নির্ভর করে নিম্নলিখিতগুলির একটি ব্যবহার করুন:
-
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 আপডেট হওয়া ফাইলের জন্য 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 সহজেই ডাউনলোড এবং পুনরায় লোড করতে, এনপিএম ইনস্টল ব্যবহার করে Google Cloud Storage প্যাকেজটি ইনস্টল করুন npm install --save @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');
gcs.bucket.file(filePath).download
ব্যবহার করুন। আপনার Cloud Functions উদাহরণে একটি অস্থায়ী ডিরেক্টরিতে কোনও ফাইল ডাউনলোড করার জন্য ডাউনলোড করুন। এই স্থানে, আপনি প্রয়োজনীয় হিসাবে ফাইলটি প্রক্রিয়া করতে পারেন এবং তারপরে 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 আবার আপলোড করে।
আরও উদাহরণ অনুসন্ধান করুন
ট্রান্সকোডিং চিত্র , মডারেটিং সামগ্রী , এক্সআইএফ মেটাডেটা আহরণ সহ সাধারণ মিডিয়া ট্রান্সফর্মেশন ফাংশনগুলির আরও উদাহরণ। উদাহরণগুলির সম্পূর্ণ তালিকা গিথুব এ উপলব্ধ।