محرک های ذخیره سازی ابری

می‌توانید یک تابع را در پاسخ به آپلود، به‌روزرسانی یا حذف فایل‌ها و پوشه‌ها در Cloud Storage فعال کنید.

نمونه‌های موجود در این صفحه بر اساس یک تابع نمونه است که هنگام آپلود فایل‌های تصویری در فضای ذخیره‌سازی ابری فعال می‌شود. این تابع نمونه نحوه دسترسی به ویژگی‌های رویداد، نحوه دانلود یک فایل در نمونه توابع ابری و دیگر اصول مدیریت رویدادهای Cloud Storage را نشان می‌دهد.

برای مثال‌های بیشتر از موارد استفاده، ببینید چه کاری می‌توانم با توابع ابری انجام دهم؟

یک تابع را در تغییرات فضای ذخیره سازی ابری فعال کنید

از functions.storage برای ایجاد تابعی استفاده کنید که رویدادهای Cloud Storage را مدیریت کند. بسته به اینکه می‌خواهید عملکرد خود را به یک سطل فضای ذخیره‌سازی ابری اختصاص دهید یا از سطل پیش‌فرض استفاده کنید، از یکی از موارد زیر استفاده کنید:

به عنوان مثال، نمونه مولد تصاویر کوچک به سطل پیش‌فرض پروژه اختصاص دارد:

exports.generateThumbnail = 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.
const metageneration = object.metageneration; // Number of times metadata has been generated. New objects have a value of 1.

نمونه تولید تصویر بندانگشتی از برخی از این ویژگی ها برای تشخیص موارد خروجی استفاده می کند که در آن تابع برمی گردد:

// 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، بسته Google Cloud Storage را با استفاده از npm install --save @google-cloud/storage و آن را وارد کنید. برای استفاده از جاوا اسکریپت برای مدیریت فرآیندهای خارجی مانند وظایف پردازش تصویر کوچک در نمونه، فرزند- child-process-promise نیز وارد کنید:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp()
const spawn = require('child-process-promise').spawn;
const path = require('path');
const os = require('os');
const fs = require('fs');

از gcs.bucket.file(filePath).download برای دانلود یک فایل در پوشه موقت در نمونه توابع Cloud خود استفاده کنید. در این مکان، می توانید فایل را در صورت نیاز پردازش کرده و سپس در فضای ذخیره سازی ابری آپلود کنید. هنگام انجام کارهای ناهمزمان، اطمینان حاصل کنید که در تماس برگشتی خود یک وعده جاوا اسکریپت را برگردانید.

مثال: تبدیل تصویر

Cloud Functions یک برنامه پردازش تصویر به نام ImageMagick را ارائه می دهد که می تواند روی فایل های تصویری گرافیکی دستکاری کند. در زیر نمونه ای از نحوه ایجاد یک تصویر کوچک برای یک فایل تصویری آپلود شده آورده شده است:

// Download file from bucket.
const bucket = admin.storage().bucket(fileBucket);
const tempFilePath = path.join(os.tmpdir(), fileName);
const metadata = {
  contentType: contentType,
};
await bucket.file(filePath).download({destination: tempFilePath});
functions.logger.log('Image downloaded locally to', tempFilePath);
// Generate a thumbnail using ImageMagick.
await spawn('convert', [tempFilePath, '-thumbnail', '200x200>', tempFilePath]);
functions.logger.log('Thumbnail created at', tempFilePath);
// We add a 'thumb_' prefix to thumbnails file name. That's where we'll upload the thumbnail.
const thumbFileName = `thumb_${fileName}`;
const thumbFilePath = path.join(path.dirname(filePath), thumbFileName);
// Uploading the thumbnail.
await bucket.upload(tempFilePath, {
  destination: thumbFilePath,
  metadata: metadata,
});
// Once the thumbnail has been uploaded delete the local file to free up disk space.
return fs.unlinkSync(tempFilePath);

این کد برنامه convert خط فرمان ImageMagick را اجرا می کند تا یک تصویر کوچک 200x200 برای تصویر ذخیره شده در یک فهرست موقت ایجاد کند، سپس آن را به Cloud Storage بارگذاری می کند.

نمونه های بیشتری را بررسی کنید

نمونه های بیشتری از توابع متداول تبدیل رسانه از جمله رمزگذاری تصاویر ، تعدیل محتوا ، استخراج فراداده EXIF . لیست کامل نمونه ها در GitHub موجود است.

برای اطلاعات بیشتر، به مستندات راه‌اندازی کامل Google Cloud Storage مراجعه کنید.