使用文件元数据
在将文件上传到 Cloud Storage 引用之后,您还可以获取和更新文件元数据,例如更新内容类型。文件还可以使用额外的文件元数据来存储自定义键值对。
获取文件元数据
文件元数据包含 name、size 和 contentType(通常称为 MIME 类型)等常用属性,以及 contentDisposition 和 timeCreated 等不太常用的属性。您可以使用 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 |
[String: String] | 是 |
上传、下载和更新文件很重要,但能够将其移除也同样重要。请了解如何从 Cloud Storage 中删除文件。
