مشغلات التخزين السحابي


يمكنك تشغيل وظيفة استجابةً لتحميل الملفات والمجلدات أو تحديثها أو حذفها في Cloud Storage.

تعتمد الأمثلة الواردة في هذه الصفحة على نموذج دالة يتم تشغيلها عند تحميل ملفات الصور إلى Cloud Storage. توضح هذه الوظيفة النموذجية كيفية الوصول إلى سمات الحدث، وكيفية تنزيل ملف إلى مثيل Cloud Functions، وأساسيات أخرى للتعامل مع أحداث Cloud Storage.

لمزيد من الأمثلة على حالات الاستخدام، راجع ما الذي يمكنني فعله باستخدام وظائف السحابة؟

قم بتشغيل وظيفة في تغييرات التخزين السحابي

استخدم functions.storage لإنشاء وظيفة تتعامل مع أحداث Cloud Storage. اعتمادًا على ما إذا كنت تريد توسيع نطاق وظيفتك إلى مجموعة Cloud Storage محددة أو استخدام الحاوية الافتراضية، استخدم أحد الإجراءات التالية:

على سبيل المثال، يتم تحديد نطاق نموذج منشئ الصور المصغرة إلى المجموعة الافتراضية للمشروع:

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

يدعم Cloud Storage هذه الأحداث:

  • يتم إرسال onArchive فقط عندما تقوم مجموعة بتمكين إصدار الكائن . يشير هذا الحدث إلى أن الإصدار المباشر لكائن ما أصبح إصدارًا مؤرشفًا، إما لأنه تمت أرشفته أو لأنه تمت الكتابة فوقه عن طريق تحميل كائن يحمل نفس الاسم.
  • onDelete يتم إرساله عندما يتم حذف كائن نهائيًا. يتضمن ذلك الكائنات التي تم استبدالها أو حذفها كجزء من تكوين دورة حياة الحاوية. بالنسبة للحاويات التي تم تمكين تعيين إصدارات الكائنات فيها، لا يتم إرسال هذا عند أرشفة كائن (راجع onArchive )، حتى لو حدثت الأرشفة عبر التابع storage.objects.delete .
  • يتم إرسال onFinalize عندما يتم إنشاء كائن جديد (أو جيل جديد من كائن موجود) بنجاح في المجموعة. يتضمن ذلك نسخ أو إعادة كتابة كائن موجود. لا يؤدي التحميل الفاشل إلى تشغيل هذا الحدث.
  • يتم إرسال onMetadataUpdate عندما تتغير البيانات التعريفية لكائن موجود.

قم بتعيين الحدث داخل معالج الحدث on كما هو موضح أعلاه لـ onFinalize .

الوصول إلى سمات كائن التخزين السحابي

تعرض Cloud Functions عددًا من سمات كائن Cloud Storage مثل size ونوع contentType للملف الذي تم تحديثه. تتم زيادة سمة "التوليد التعريفي" كلما حدث تغيير في البيانات التعريفية للكائن. بالنسبة للكائنات الجديدة، تكون قيمة 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 ، ثم قم باستيرادها. لاستخدام وعود JavaScript للتعامل مع العمليات الخارجية مثل مهام معالجة الصور المصغرة في العينة، قم أيضًا باستيراد 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. عند تنفيذ مهام غير متزامنة، تأكد من إرجاع وعد JavaScript في رد الاتصال الخاص بك.

مثال: تحويل الصورة

باستخدام 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!");

يقوم هذا الرمز بإنشاء صورة مصغرة مقاس 200 × 200 للصورة المحفوظة في دليل مؤقت، ثم يقوم بتحميلها مرة أخرى إلى Cloud Storage.

استكشاف المزيد من الأمثلة

المزيد من الأمثلة على وظائف تحويل الوسائط الشائعة، بما في ذلك تحويل ترميز الصور ، وإدارة المحتوى ، واستخراج بيانات تعريف EXIF . القائمة الكاملة للأمثلة متاحة على GitHub.