就像在文档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
谢谢你告诉我这件事!
让我尝试解释您的代码发生了什么。看看是否可以澄清您的疑问。
当您执行以下代码时:
await blob.UploadTextAsync("content");
本质上,它调用Put Blob
REST API。从REST API文档中可以看到,使用blob.Metadata["testdata"] = "set";
代码指定的任何元数据元素都将传递到REST API的x-ms-meta-testdata
标头中。
因此,当执行此代码时,元数据将与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库使用接收到的数据作为对REST API调用的响应来更新Metadata
您的属性blob
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句