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

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

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

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

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

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

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

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

يدعم Cloud Storage الأحداث التالية:

  • يتم إرسال 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 ، تحتاج إلى تنزيل الملفات إلى مثيل الوظائف - أي الجهاز الظاهري الذي يقوم بتشغيل التعليمات البرمجية الخاصة بك.

لتنزيل الكائنات وإعادة تحميلها بسهولة إلى 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 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 للحصول على مزيد من المعلومات.