Check out what’s new from Firebase@ Google I/O 2021, and join our alpha program for early access to the new Remote Config personalization feature. Learn more

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

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

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

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

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

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

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

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

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

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

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

חקור דוגמאות נוספות

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

עיין בתיעוד המלא של אחסון הענן של Google למידע נוסף.