CloudBlockBlob:DownloadTextAsync 和 UploadTextAsync 以及 Metadata/Properties
CloudBlockBlob: DownloadTextAsync and UploadTextAsync and Metadata/Properties
如文档 azure doc or 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";
代码指定的任何元数据元素都会传递到 x-ms-meta-testdata
header 中的 REST API。
所以当这段代码执行时,元数据会与 blob 一起保存。
当你执行下面这行代码时:
blob.Metadata["notset"] = "set";
基本上,blob object(属于 CloudBlockBlob
类型)Metadata
property gets updated. This update happens only on the client side and nothing gets saved in the blob. In order to save it, you must call SetMetadataAsync
。
来到最后一部分,当您执行以下代码行时:
var content = await blob.DownloadTextAsync();
本质上它调用 Get Blob
REST API。正如您从 REST API 文档中看到的那样,此操作还 returns 响应 header 中的 blob 的元数据。然后,Azure 存储客户端库使用收到的数据作为对 REST API 调用的响应,更新 blob
的 Metadata
属性。
如文档 azure doc or 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";
代码指定的任何元数据元素都会传递到 x-ms-meta-testdata
header 中的 REST API。
所以当这段代码执行时,元数据会与 blob 一起保存。
当你执行下面这行代码时:
blob.Metadata["notset"] = "set";
基本上,blob object(属于 CloudBlockBlob
类型)Metadata
property gets updated. This update happens only on the client side and nothing gets saved in the blob. In order to save it, you must call SetMetadataAsync
。
来到最后一部分,当您执行以下代码行时:
var content = await blob.DownloadTextAsync();
本质上它调用 Get Blob
REST API。正如您从 REST API 文档中看到的那样,此操作还 returns 响应 header 中的 blob 的元数据。然后,Azure 存储客户端库使用收到的数据作为对 REST API 调用的响应,更新 blob
的 Metadata
属性。