שימוש במטא-נתונים של קבצים ב-Cloud Storage ב-Flutter

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

אחזור מטא-נתונים של קובץ

המטא-נתונים של הקובץ מכילים מאפיינים נפוצים כמו name,‏ size ו-contentType (שנקראים לרוב סוג MIME), וגם מאפיינים פחות נפוצים כמו contentDisposition ו-timeCreated. אפשר לאחזר את המטא-נתונים מהפניה של Cloud Storage באמצעות ה-method getMetadata().

// Create reference to the file whose metadata we want to retrieve
final forestRef = storageRef.child("images/forest.jpg");

// Get metadata properties
final metadata = await forestRef.getMetadata();

// Metadata now contains the metadata for 'images/forest.jpg'

עדכון המטא-נתונים של הקובץ

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

// Create reference to the file whose metadata we want to change
final forestRef = storageRef.child("images/forest.jpg");

// Create file metadata to update
final newMetadata = SettableMetadata(
  cacheControl: "public,max-age=300",
  contentType: "image/jpeg",
);

// Update metadata properties
final metadata = await forestRef.updateMetadata(newMetadata);

// Updated metadata for 'images/forest.jpg' is returned

אפשר למחוק מאפייני מטא-נתונים שניתנים לכתיבה על ידי העברת null:

// Delete the cacheControl property
final newMetadata = SettableMetadata(cacheControl: null);
final metadata = await forestRef.updateMetadata(newMetadata);

טיפול בשגיאות

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

מטא-נתונים בהתאמה אישית

אפשר לציין מטא-נתונים מותאמים אישית באמצעות הפרמטר customMetadata של ה-constructor‏ SettableMetadata:

// Create reference to the file whose metadata we want to change
final forestRef = storageRef.child("images/forest.jpg");

// Create file metadata to update
final newCustomMetadata = SettableMetadata(
  customMetadata: {
    "location": "Yosemite, CA, USA",
    "activity": "Hiking",
  },
);

// Update metadata properties
final metadata = await forestRef.updateMetadata(newCustomMetadata);

// Updated metadata for 'images/forest.jpg' is returned

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

מאפייני המטא-נתונים של הקובץ

רשימה מלאה של מאפייני המטא-נתונים בקובץ זמינה בהמשך:

נכס סוג אפשר להגדיר אותם?
bucket String לא
generation String לא
metageneration String לא
metadataGeneration String לא
fullPath String לא
name String לא
size int לא
timeCreated DateTime לא
updated DateTime לא
md5Hash String לא
cacheControl String כן
contentDisposition String כן
contentEncoding String כן
contentLanguage String כן
contentType String כן
customMetadata Map<String, String> כן

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