מפעילה אחסון ענן

באפשרותך להפעיל פונקציה בתגובה להעלאה, עדכון או מחיקה של קבצים ותיקיות ב- Cloud Storage.

דוגמאות בעמוד זה מבוססות על פונקציית דוגמה המופעלת בעת העלאת קבצי תמונה לאחסון ענן. פונקציית דוגמה זו מדגימה כיצד לגשת לתכונות אירועים, כיצד להוריד קובץ למופע ענן פונקציות, ויסודות יסוד אחרים לטיפול באירועי אחסון בענן.

לדוגמא נוספות של מקרי שימוש, לראות מה אני יכול לעשות עם פונקציות ענן?

מפעילים פונקציה בשינוי אחסון בענן

השתמשו functions.storage ליצור פונקציה שמטפלת לאחסון בענן אירועים. תלוי אם ברצונך להקיף את הפונקציה שלך לדלי אחסון ענן ספציפי או להשתמש בדלי ברירת המחדל, השתמש באחת מהפעולות הבאות:

לדוגמה, הדוגמה של מחולל התמונות הממוזערות מוגדרת לדלי ברירת המחדל של הפרויקט:

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

אחסון בענן תומך באירועים הבאים:

  • onArchive רק שלח כאשר בדלים אפשרו אובייקט הגירסות . אירוע זה מצביע על כך שהגרסה החיה של אובייקט הפכה לגרסה שהועברה לארכיון, משום שהיא הועברה לארכיון או משום שהיא הוחלפה על ידי העלאת אובייקט באותו שם.
  • onDelete שנשלחו כאשר האובייקט נמחק לצמיתות. זה כולל אובייקטים מוחלפים או נמחקים כחלק דלי-השיירים תצורת מחזור החיים . עבור דליים עם אובייקט הגירסות מופעלים, זה לא יישלח כאשר אובייקט בארכיון (ראה onArchive ), גם אם ארכיונים מתרחשים דרך storage.objects.delete השיטה.
  • onFinalize שנשלח כאשר אובייקט חדש (או דור חדש של אובייקט קיים) נוצר בהצלחה בים. זה כולל העתקה או שכתוב של אובייקט קיים. העלאה נכשלה אינה מפעילה אירוע זה.
  • onMetadataUpdate יישלח כאשר metadata של שינויים אובייקט קיים.

הגדר את האירוע בתוך on מטפל אירוע כמתואר לעיל onFinalize .

גישה למאפייני אובייקט אחסון בענן

פונקציות ענן חושפת מספר אובייקט אחסון ענן תכונות כגון size ו contentType עבור הקובץ המעודכן. "Metageneration" התכונה מוגדלת בכול פעם שיש שינוי metadata של האובייקט. עבור אובייקטים חדשים, 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, עליך להוריד קבצים למופע הפונקציות - כלומר למכונה הווירטואלית שמריצה את הקוד שלך.

לאובייקטים להוריד ולהעלות אותו מחדש בקלות לאחסון בענן, להתקין את חבילת 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 להוריד קובץ לספריה זמנית על מופע פונקציות קלאוד שלך. במיקום זה תוכלו לעבד את הקובץ לפי הצורך ואז להעלות לאחסון בענן. בעת ביצוע משימות אסינכרוניות, הקפד להחזיר הבטחת 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);

קוד זה מבצע את ImageMagick תוכנית שורת הפקודה convert ליצור תמונה ממוזערת 200x200 לתמונה נשמר בספרייה זמני, ומועלים אותו בחזרה לאחסון בענן.

גלה דוגמאות נוספות

דוגמאות נוספות של פונקציות שינוי תקשורת הנפוצה כולל המרת תמונות , פיקוח על התוכן , לחילוץ metadata EXIF . רשימה מלאה בדוגמאות נגיש GitHub.

ראה על ההדק מלא Google Cloud Storage תיעוד לקבלת מידע נוסף.