在将文件上传到 Cloud Storage 引用之后,您还可以获取和更新文件元数据,例如更新内容类型。文件还可以使用额外的文件元数据来存储自定义键值对。
获取文件元数据
文件元数据包含 Name
、SizeBytes
和 ContentType
(通常称为 MIME 类型)等常用属性;以及 ContentDisposition
和 CreationTimeMillis
等不太常用的属性。您可以使用 GetMetadataAsync
方法从 Cloud Storage 引用中检索此元数据。
// Create reference to the file whose metadata we want to retrieve StorageReference forestRef = storageRef.Child("images/forest.jpg"); // Get metadata properties forestRef.GetMetadataAsync().ContinueWithOnMainThread(task => { if (!task.IsFaulted && !task.IsCanceled) { StorageMetadata meta = task.Result; // do stuff with meta } });
更新文件元数据
文件上传完成后,您可以使用接受 MetadataChange
对象的 UpdateMetadataAsync
方法随时更新文件元数据。请参考完整清单,详细了解什么属性可以更新。只有元数据中指定的属性才会更新,所有其他属性不会被修改。
// Create reference to the file whose metadata we want to change StorageReference forestRef = storageRef.Child("images/forest.jpg"); // Create file metadata to update var newMetadata = new MetadataChange(); newMetadata.CacheControl = "public,max-age=300"; newMetadata.ContentType = "image/jpeg"; // Update metadata properties forestRef.UpdateMetadataAsync(newMetadata).ContinueWithOnMainThread(task => { if (!task.IsFaulted && !task.IsCanceled) { // access the updated meta data StorageMetadata meta = task.Result; } });
您可以通过传递空字符串来删除可写元数据属性:
// Create file metadata to update var newMetadata = new MetadataChange(); newMetadata.ContentType = ""; // Update metadata properties forestRef.UpdateMetadataAsync(newMetadata).ContinueWithOnMainThread(task => { if (!task.IsFaulted && !task.IsCanceled) { StorageMetadata meta = task.Result; // meta.ContentType should be an empty string now } });
处理错误
获取或更新元数据时,有很多原因会引发错误,包括文件不存在或者用户无权访问相关的文件。如需了解有关错误的详细信息,请参阅文档的处理错误部分。
自定义元数据
您可以将自定义元数据指定为 Dictionary<string, string>
。
var newMetadata = new MetadataChange { CustomMetadata = new Dictionary<string, string> { {"location", "Yosemite, CA, USA"}, {"activity", "Hiking"} } }; // UpdateMetadataAsync
您可以在自定义元数据中为每个文件存储特定于应用的数据,不过我们强烈建议您使用数据库(例如 Firebase Realtime Database)来存储和同步这种类型的数据。
文件元数据属性
文件元数据属性的完整列表如下:
属性 | 类型 | 是否可在 MetadataChange 中修改 |
---|---|---|
Bucket |
string |
否 |
Generation |
string |
否 |
MetadataGeneration |
string |
否 |
Path |
string |
否 |
Name |
string |
否 |
SizeBytes |
long |
否 |
CreationTimeMillis |
long |
否 |
UpdatedTimeMillis |
long |
否 |
CacheControl |
string |
是 |
ContentDisposition |
string |
是 |
ContentEncoding |
string |
是 |
ContentLanguage |
string |
是 |
ContentType |
string |
是 |
DownloadUrl |
Uri |
否 |
DownloadUrls |
IList<Uri> |
否 |
CustomMetadataKeys |
IEnumerable<string> |
是 |
后续步骤
上传、下载和更新文件很重要,但能够将其移除也同样重要。请了解如何从 Cloud Storage 中删除文件。