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

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

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

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

Swift

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

// Get metadata properties
do {
  let metadata = try await forestRef.getMetadata()
} catch {
  // ...
}
    

Objective-C

// Create reference to the file whose metadata we want to retrieve
FIRStorageReference *forestRef = [storageRef child:@"images/forest.jpg"];

// Get metadata properties
[forestRef metadataWithCompletion:^(FIRStorageMetadata *metadata, NSError *error) {
  if (error != nil) {
    // Uh-oh, an error occurred!
  } else {
    // Metadata now contains the metadata for 'images/forest.jpg'
  }
}];
  

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

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

Swift

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

// Create file metadata to update
let newMetadata = StorageMetadata()
newMetadata.cacheControl = "public,max-age=300"
newMetadata.contentType = "image/jpeg"

// Update metadata properties
do {
  let updatedMetadata = try await forestRef.updateMetadata(newMetadata)
} catch {
  // ...
}
    

Objective-C

// Create reference to the file whose metadata we want to change
FIRStorageReference *forestRef = [storageRef child:@"images/forest.jpg"];

// Create file metadata to update
FIRStorageMetadata *newMetadata = [[FIRStorageMetadata alloc] init];
newMetadata.cacheControl = @"public,max-age=300";
newMetadata.contentType = @"image/jpeg";

// Update metadata properties
[forestRef updateMetadata:newMetadata completion:^(FIRStorageMetadata *metadata, NSError *error){
  if (error != nil) {
    // Uh-oh, an error occurred!
  } else {
    // Updated metadata for 'images/forest.jpg' is returned
  }
}];
  

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

Objective-C

FIRStorageMetadata *newMetadata = [[FIRStorageMetadata alloc] init];
newMetadata.contentType = nil;

// Delete the metadata property
[forestRef updateMetadata:newMetadata completion:^(FIRStorageMetadata *metadata, NSError *error){
  if (error != nil) {
    // Uh-oh, an error occurred!
  } else {
    // metadata.contentType should be nil
  }
}];

Swift

let newMetadata = StorageMetadata()
newMetadata.contentType = nil

do {
  // Delete the metadata property
  let updatedMetadata = try await forestRef.updateMetadata(newMetadata)
} catch {
  // ...
}

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

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

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

אפשר לציין מטא-נתונים בהתאמה אישית בתור NSDictionary שמכיל מאפייני NSString.

Swift

let metadata = [
  "customMetadata": [
    "location": "Yosemite, CA, USA",
    "activity": "Hiking"
  ]
]
    

Objective-C

NSDictionary *metadata = @{
  @"customMetadata": @{
    @"location": @"Yosemite, CA, USA",
    @"activity": @"Hiking"
  }
};

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

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

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

נכס סוג ניתן לכתיבה
bucket מחרוזת לא
generation מחרוזת לא
metageneration מחרוזת לא
fullPath מחרוזת לא
name מחרוזת לא
size Int64 לא
timeCreated תאריך לא
updated תאריך לא
md5Hash מחרוזת כן
cacheControl מחרוזת כן
contentDisposition מחרוזת כן
contentEncoding מחרוזת כן
contentLanguage מחרוזת כן
contentType מחרוזת כן
customMetadata [מחרוזת: מחרוזת] כן

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