通过 Unity 版 Cloud Storage 使用文件元数据

在将文件上传到 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 中删除文件。