محرک های Cloud Storage

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

مثالهای این صفحه بر اساس یک نمونه عملکرد است که هنگام بارگذاری فایلهای تصویری در Cloud Storage ایجاد می شود. این تابع نمونه نحوه دسترسی به ویژگی های رویداد ، نحوه بارگیری یک فایل در نمونه Cloud Functions و سایر اصول مدیریت رویدادهای Cloud Storage را نشان می دهد.

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

یک عملکرد را در تغییرات Cloud Storage فعال کنید

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

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

exports.generateThumbnail = functions.storage.object().onFinalize(async (object) => {
  // ...
});

ذخیره سازی ابری از این رویدادها پشتیبانی می کند:

  • onArchive تنها زمانی که یک سطل را فعال کرده ارسال جسم نسخه . این رویداد نشان می دهد که نسخه زنده یک شی به نسخه بایگانی شده تبدیل شده است ، یا به این دلیل که بایگانی شده است یا به دلیل بارگذاری یک شیء به همین نام ، رونویسی شده است.
  • onDelete فرستاده زمانی که یک شی است برای همیشه حذف شده است. این شامل اشیاء که رونویسی و یا به عنوان بخشی از سطل را حذف پیکربندی چرخه عمر . سطل با شی ورژن را فعال کنید، این را ارسال نکرده است زمانی که یک شی بایگانی می شود (نگاه کنید به onArchive )، حتی اگر آرشیوی از طریق رخ می دهد storage.objects.delete روش.
  • onFinalize ارسال هنگامی که یک شی جدید (و یا نسل جدیدی از یک شی موجود) است که با موفقیت در سطل ایجاد شده است. این شامل کپی یا بازنویسی یک شی موجود است. بارگذاری ناموفق این رویداد را فعال نمی کند.
  • onMetadataUpdate فرستاده زمانی که ابرداده از تغییرات شی موجود است.

تنظیم رویداد در on اداره کننده رویداد همانطور که در بالا نشان داده شده است برای onFinalize .

دسترسی به ویژگی های شیء 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 ، باید فایلها را در نمونه توابع - یعنی ماشین مجازی که کد شما را اجرا می کند - بارگیری کنید.

به راحتی دانلود و آپلود مجدد اشیاء به ابر ذخیره سازی، نصب بسته گوگل ابر ذخیره سازی با استفاده از 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 Storage بارگذاری کنید. هنگام انجام وظایف ناهمزمان ، مطمئن شوید که یک وعده جاوا اسکریپت را در تماس تلفنی خود برمی گردانید.

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

توابع ابر برنامه پردازشگر به نام فراهم می کند 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);

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

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

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

گوگل ابر ذخیره سازی ماشه را ببینید مستندات برای اطلاعات بیشتر.