يمكنك بدء وظيفة استجابةً لتحميل الملفات والمجلدات أو تعديلها أو حذفها في 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
يتم إرساله عند تغيير البيانات الوصفية لعنصر موجود.
اضبط الحدث ضمن معالِج أحداث "on
" كما هو موضّح أعلاه في "onFinalize
".
الوصول إلى سمات عناصر 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
واستورِدها. لاستخدام 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. فعندما
بأداء مهام غير متزامنة، فتأكد من عرض وعد جافا سكريبت في
معاودة الاتصال.
مثال: تحويل الصورة
باستخدام 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.