Catch up on everthing we announced at this year's Firebase Summit. Learn more

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

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

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

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

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

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

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

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

Cloud Storage תומך באירועים אלה:

  • 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 תיעוד לקבלת מידע נוסף.