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

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

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

המטא-נתונים של הקובץ מכילים מאפיינים נפוצים כמו name, size ו-contentType (שנקרא לעיתים קרובות סוג MIME), בנוסף למאפיינים פחות נפוצים כמו contentDisposition ו-timeCreated. אפשר לאחזר את המטא-נתונים האלה מהפניה ל-Cloud Storage באמצעות השיטה 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 Realtime Database) כדי לאחסן ולסנכרן את סוג הנתונים הזה.

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

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

נכס סוג ניתן להגדרה?
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