يمكنك تشغيل وظيفة ردًا على تحميل الملفات والمجلدات أو تحديثها أو حذفها في Cloud Storage.
تعتمد الأمثلة في هذه الصفحة على دالة نموذجية يتم تشغيلها عند تحميل ملفات الصور إلى التخزين السحابي. توضح هذه الوظيفة النموذجية كيفية الوصول إلى سمات الحدث ، وكيفية تنزيل ملف إلى مثيل وظائف السحابة ، والأساسيات الأخرى للتعامل مع أحداث التخزين السحابي.
لمزيد من أمثلة حالات الاستخدام ، راجع ماذا يمكنني أن أفعل بوظائف السحابة؟
قم بتشغيل وظيفة على تغييرات التخزين السحابي
استخدم functions.storage
لإنشاء وظيفة تتعامل مع أحداث التخزين السحابي. اعتمادًا على ما إذا كنت تريد توسيع نطاق وظيفتك إلى حاوية تخزين سحابية معينة أو استخدام الحاوية الافتراضية ، استخدم أحد الخيارات التالية:
-
functions.storage.object()
للاستماع إلى تغييرات الكائن في حاوية التخزين السحابي الافتراضية. -
functions.storage.bucket('bucketName').object()
للاستماع إلى تغييرات الكائن في حاوية معينة.
على سبيل المثال ، يتم تحديد نطاق عينة منشئ الصور المصغرة للحاوية الافتراضية للمشروع:
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 ، قم بتثبيت حزمة Google Cloud Storage باستخدام npm install --save @google-cloud/storage
واستيرادها. لاستخدام وعود JavaScript بمعالجة العمليات الخارجية مثل مهام معالجة الصور المصغرة في العينة ، قم أيضًا باستيراد 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 Functions. في هذا الموقع ، يمكنك معالجة الملف حسب الحاجة ثم تحميله إلى Cloud Storage. عند تنفيذ مهام غير متزامنة ، تأكد من إرجاع وعد JavaScript في رد الاتصال الخاص بك.
مثال: تحويل الصورة
توفر وظائف السحابة برنامجًا لمعالجة الصور يسمى 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
لإنشاء صورة مصغرة بحجم 200 × 200 للصورة المحفوظة في دليل مؤقت ، ثم تحميلها مرة أخرى إلى التخزين السحابي.
اكتشف المزيد من الأمثلة
المزيد من الأمثلة على وظائف تحويل الوسائط الشائعة بما في ذلك تحويل الصور ، وتعديل المحتوى ، واستخراج بيانات EXIF الوصفية . القائمة الكاملة للأمثلة متاحة على GitHub.
راجع الوثائق الكاملة لمشغل Google Cloud Storage للحصول على مزيد من المعلومات.