Google is committed to advancing racial equity for Black communities. See how.
ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

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

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

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

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

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

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

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

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

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

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

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

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

تعرض وظائف السحابة عددًا من سمات كائن التخزين مثل 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 console.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 console.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');
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});
console.log('Image downloaded locally to', tempFilePath);
// Generate a thumbnail using ImageMagick.
await spawn('convert', [tempFilePath, '-thumbnail', '200x200>', tempFilePath]);
console.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 لمزيد من المعلومات.