אפשר להפעיל פונקציה בתגובה להעלאה, לעדכון או למחיקה של קבצים ותיקיות ב-Cloud Storage.
הדוגמאות בדף הזה מבוססות על פונקציה לדוגמה שמופעלת כאשר קבצים מועלים אל Cloud Storage. הפונקציה לדוגמה הזו ממחישה איך לגשת למאפייני אירועים, איך להוריד קובץ למכונה של Cloud Functions ויסודות אחרים לטיפול באירועי Cloud Storage.
דוגמאות נוספות של תרחישים לדוגמה זמינות בכתובת מה אפשר לעשות עם Cloud Functions?
הפעלת פונקציה כשמתרחשים שינויים ב-Cloud Storage
שימוש ב-functions.storage
כדי ליצור פונקציה שמטפלת
Cloud Storage אירועים. תלוי אם רוצים להגביל את
בפונקציה ספציפית של Cloud Storage או להשתמש בברירת המחדל
משתמשים באחת מהאפשרויות הבאות:
functions.storage.object()
כדי להאזין לשינויים באובייקטים בקטגוריה Cloud Storage שמוגדרת כברירת מחדל.functions.storage.bucket('bucketName').object()
כדי להאזין לשינויים באובייקטים בקטגוריה ספציפית.
לדוגמה, הדוגמה ליצירת תמונות ממוזערות מוגבלת לקטגוריית ברירת המחדל של הפרויקט:
exports.firstGenGenerateThumbnail = functions.storage.object().onFinalize(async (object) => { // ... });
Cloud Storage תומך באירועים הבאים:
onArchive
מתרחש רק אם האפשרות object versioning מופעלת בקטגוריה. האירוע הזה מציין שהגרסה הפעילה של אובייקט הפכה לגרסת העברה לארכיון, כי היא הועברה לארכיון או כי העלאה של אובייקט באותו שם החליפה אותה.onDelete
מתרחש כשאובייקט נמחק באופן סופי. זה כולל גם אובייקטים שמוחלפים או נמחקים כחלק מהגדרות מחזור החיים של הקטגוריה. בקטגוריות שבהן מופעל ניהול גרסאות של אובייקטים, הנתון לא נשלח כשאובייקט מועבר לארכיון (ראוonArchive
), גם אם העברה לארכיון מתבצעת באמצעות השיטהstorage.objects.delete
.onFinalize
נשלח כשאובייקט חדש (או דור חדש של אובייקט קיים) נוצר בהצלחה בקטגוריה. זה כולל העתקה או שכתוב של אובייקט קיים. האירוע הזה לא יופעל במקרה של העלאה שנכשלה.onMetadataUpdate
מתרחש כשהמטא-נתונים של אובייקט קיים משתנים.
צריך להגדיר את האירוע בתוך הגורם המטפל באירועים של on
כפי שמוצג למעלה עבור onFinalize
.
גישה למאפייני אובייקט Cloud Storage
Cloud Functions חושף מספר מאפיינים של אובייקט Cloud Storage, כמו size
ו-contentType
של הקובץ המעודכן.
'מטא-גנרציה'
עולה בכל פעם שמשתנה
המטא-נתונים של האובייקט. באובייקטים חדשים, הערך של 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.
בדוגמה ליצירת תמונות ממוזערות נעשה שימוש בחלק מהמאפיינים האלה כדי לזהות מקרים של יציאה שבהם הפונקציה מחזירה:
// 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
ולייבא אותו. כדי להשתמש ב-JavaScript
מבטיח לטפל בתהליכים חיצוניים, כמו משימות של עיבוד תמונות ממוזערות
לדוגמה, ייבא גם את child-process-promise
:
const functions = require('firebase-functions/v1'); const admin = require('firebase-admin'); admin.initializeApp() const path = require('path'); //library for resizing images const sharp = require('sharp');
שימוש ב-gcs.bucket.file(filePath).download
כדי להוריד קובץ לקובץ זמני
במכונה Cloud Functions. במיקום הזה תוכלו לעבד את הקובץ לפי הצורך ואז להעלות אותו אל Cloud Storage. מתי
ביצוע משימות אסינכרוניות, ודאו שאתם מחזירים הבטחת JavaScript
קריאה חוזרת.
דוגמה: טרנספורמציה של תמונה
שימוש ב-Cloud Functions יחד עם תוכנות לעיבוד תמונה כמו
sharp
, באפשרותך לבצע
ביצוע מניפולציות על קובצי תמונות גרפיות. הדוגמה הבאה ממחישה איך
יצירת תמונה ממוזערת לקובץ תמונה שהועלה:
// Download file from bucket. const bucket = admin.storage().bucket(fileBucket); const metadata = { contentType: contentType, }; const downloadResponse = await bucket.file(filePath).download(); const imageBuffer = downloadResponse[0]; functions.logger.log("Image downloaded!"); // Generate a thumbnail using sharp. const thumbnailBuffer = await sharp(imageBuffer).resize({ width: 200, height: 200, withoutEnlargement: true, }).toBuffer(); functions.logger.log("Thumbnail created"); // Upload the thumbnail with a 'thumb_' prefix. const thumbFileName = `thumb_${fileName}`; const thumbFilePath = path.join(path.dirname(filePath), thumbFileName); await bucket.file(thumbFilePath).save(thumbnailBuffer, { metadata: metadata, }); return functions.logger.log("Thumbnail uploaded!");
הקוד הזה יוצר תמונה ממוזערת בגודל 200x200 של התמונה שנשמרה בספרייה זמנית, ולאחר מכן מעלה אותה חזרה אל Cloud Storage.
דוגמאות נוספות
דוגמאות נוספות לפונקציות נפוצות של טרנספורמציה של מדיה, כולל קידוד מחדש של תמונות, ניהול תוכן וחילוץ מטא-נתונים של EXIF. הרשימה המלאה של הדוגמאות זמינה ב-GitHub.