透過 Apple 平台上的 Cloud Storage 使用檔案中繼資料

將檔案上傳至 Cloud Storage 參考資料後,您也可以取得並更新檔案中繼資料,例如更新內容類型。檔案也可以儲存自訂鍵/值組合與其他檔案中繼資料。

取得檔案中繼資料

檔案中繼資料包含常見的屬性,例如 namesizecontentType (通常稱為 MIME 類型),以及較不常見的屬性,例如 contentDispositiontimeCreated。您可以使用 metadataWithCompletion: 方法,從 Cloud Storage 參照中擷取此中繼資料。

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 {
  // ...
}

處理錯誤

取得或更新中繼資料時可能會發生錯誤,原因有很多,包括檔案不存在,或使用者沒有存取所需檔案的權限。如要進一步瞭解錯誤,請參閱說明文件的「處理錯誤」一節。

自訂中繼資料

您可以將自訂中繼資料指定為包含 NSString 屬性的 NSDictionary

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 刪除檔案