在 iOS 上使用文件元数据

在将文件上传到 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
forestRef.getMetadata { metadata, error in
  if let error = error {
    // Uh-oh, an error occurred!
  } else {
    // Metadata now contains the metadata for 'images/forest.jpg'
  }
}
    

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
forestRef.updateMetadata(newMetadata) { metadata, error in
  if let error = error {
    // Uh-oh, an error occurred!
  } else {
    // Updated metadata for 'images/forest.jpg' is returned
  }
}
    

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
  }
}];
  

您可以通过传递空字符串来删除可写元数据属性:

Objective-C

FIRStorageMetadata *newMetadata = [[FIRStorageMetadata alloc] init];
newMetadata.contentType = @"";

// 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 = "";

// Delete the metadata property
forestRef.updateMetadata(newMetadata) { metadata, error in
  if let error = error {
    // Uh-oh, an error occurred!
  } else {
    // metadata.contentType should be nil
  }
}

处理错误

获取或更新元数据时,有很多原因会引发错误,包括文件不存在或者用户无权访问相关的文件。如需了解有关错误的详细信息,请参阅文档的处理错误部分。

自定义元数据

您可以将自定义元数据指定为包含 NSString 属性的 NSDictionary

Swift

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

Objective-C

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

您可以在自定义元数据中为每个文件存储应用专属的数据,不过我们强烈建议您使用数据库(例如 Firebase 实时数据库)来存储和同步这种类型的数据。

文件元数据属性

下面列出了文件中可使用的所有元数据属性:

属性 类型 是否可写入
bucket NSString
generation NSString
metageneration NSString
fullPath NSString
name NSString
size int64_t
timeCreated NSDate
updated NSDate
md5Hash NSString
cacheControl NSString
contentDisposition NSString
contentEncoding NSString
contentLanguage NSString
contentType NSString
downloadURLs NSArray<NSString>
customMetadata NSDictionary<NSString, NSString>

上传、下载和更新文件很重要,但能够将其移除也同样重要。请了解如何从 Cloud Storage 中删除文件

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面