میتوانید عملکردی را در پاسخ به آپلود، بهروزرسانی یا حذف فایلها و پوشهها در Cloud Storage فعال کنید.
نمونههای موجود در این صفحه بر اساس یک تابع نمونه است که هنگام آپلود فایلهای تصویری در Cloud Storage فعال میشود. این تابع نمونه نحوه دسترسی به ویژگیهای رویداد، نحوه بارگیری یک فایل در نمونه Cloud Functions و دیگر اصول مدیریت رویدادهای Cloud Storage را نشان میدهد.
برای مثالهای بیشتر از موارد استفاده، ببینید با Cloud Functions چه کاری میتوانم انجام دهم؟
عملکردی را در تغییرات Cloud Storage فعال کنید
از functions.storage
برای ایجاد تابعی استفاده کنید که رویدادهای Cloud 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' افزایش می یابد. برای اشیاء جدید، مقدار 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 آپلود کنید. هنگام انجام کارهای ناهمزمان، مطمئن شوید که در تماس پاسخگوی خود یک وعده جاوا اسکریپت را برمی گردانید.
مثال: تبدیل تصویر
با استفاده از 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 موجود است.
،میتوانید عملکردی را در پاسخ به آپلود، بهروزرسانی یا حذف فایلها و پوشهها در Cloud Storage فعال کنید.
نمونههای موجود در این صفحه بر اساس یک تابع نمونه است که هنگام آپلود فایلهای تصویری در Cloud Storage فعال میشود. این تابع نمونه نحوه دسترسی به ویژگیهای رویداد، نحوه بارگیری یک فایل در نمونه Cloud Functions و دیگر اصول مدیریت رویدادهای Cloud Storage را نشان میدهد.
برای مثالهای بیشتر از موارد استفاده، ببینید با Cloud Functions چه کاری میتوانم انجام دهم؟
عملکردی را در تغییرات Cloud Storage فعال کنید
از functions.storage
برای ایجاد تابعی استفاده کنید که رویدادهای Cloud 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' افزایش می یابد. برای اشیاء جدید، مقدار 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 آپلود کنید. هنگام انجام کارهای ناهمزمان، مطمئن شوید که در تماس پاسخگوی خود یک وعده جاوا اسکریپت را برمی گردانید.
مثال: تبدیل تصویر
با استفاده از 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 موجود است.