CloudBlockBlob:DownloadTextAsync和UploadTextAsync以及元数据/属性

时间:2016-07-15 10:16:04

标签: c# azure azure-storage azure-storage-blobs

与文档azure docmsdn一样,您必须致电FetchAttributesAsync()填充CloudBlockBlob的元数据。

我注意到,当我呼叫DownloadTextAsync()时,元数据也会被填充,并在我呼叫UploadTextAsync()时写入。这是否安全使用,因为它在未来版本的存储sdk中不会发生变化?我无法找到确认该行为的任何文档。

样品:

        var blob = container.GetBlockBlobReference("testblob");

        blob.Metadata["testdata"] = "set";

        await blob.UploadTextAsync("content");

        blob.Metadata["notset"] = "set";

        blob = container.GetBlockBlobReference("testblob");

        var content = await blob.DownloadTextAsync();
        // here content["testdata"] is set and content["notset"] is null

感谢您提供信息!

1 个答案:

答案 0 :(得分:5)

让我试着解释你的代码发生了什么。看看这是否澄清了您的疑虑。

执行以下代码时:

await blob.UploadTextAsync("content");

本质上它调用Put Blob REST API。从REST API文档中可以看出,使用blob.Metadata["testdata"] = "set";代码指定的任何元数据元素都会传递到x-ms-meta-testdata标头中的REST API。

因此,当执行此代码时,元数据将与blob一起保存。

执行以下代码行时:

blob.Metadata["notset"] = "set";

基本上,blob对象(类型为CloudBlockBlobMetadata属性会更新。此更新仅在客户端发生,并且没有任何内容保存在blob中。要保存,您必须拨打SetMetadataAsync

到最后一部分时,执行以下代码行:

var content = await blob.DownloadTextAsync();

本质上它调用Get Blob REST API。从REST API文档中可以看出,此操作还会在响应头中返回blob的元数据。然后,Azure Storage Client库使用收到的数据更新Metadata blob属性,以响应REST API调用。