与文档azure doc或msdn一样,您必须致电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
感谢您提供信息!
答案 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对象(类型为CloudBlockBlob
)Metadata
属性会更新。此更新仅在客户端发生,并且没有任何内容保存在blob中。要保存,您必须拨打SetMetadataAsync
。
到最后一部分时,执行以下代码行:
var content = await blob.DownloadTextAsync();
本质上它调用Get Blob
REST API。从REST API文档中可以看出,此操作还会在响应头中返回blob的元数据。然后,Azure Storage Client库使用收到的数据更新Metadata
blob
属性,以响应REST API调用。