几个小时以来,我一直在尝试在使用 Azure SDK 创建的 blob 上设置一些元数据。我使用 BeginUploadFromStream()
异步上传数据,一切顺利。上传完成后,我可以使用 Blob 的 URI 访问该 Blob,因此它已成功创建,但是我设置的任何元数据都不会保留。
我在调用EndUploadFromStream()
之后设置了元数据。
我尝试通过 documentation 找到的三种方式设置元数据:
// First attempt
myBlob.Metadata["foo"] = "bar";
// Second attempt
myBlob.Metadata.Add("foo", "bar");
//Third attempt
var metadata = new NameValueCollection();
metadata["foo"] = "bar";
blob.Metadata.Add(metadata);
设置元数据后,我调用 myBlob.SetMetadata()
将元数据保存到 Azure,如文档所指定,但它不粘。该调用不会引发任何异常,但是当我获得对我的 blob 的新引用时,它没有任何元数据。
我也尝试使用 BeginSetMetadata()
和 EndSetMetadata()
异步保存元数据,但结果相似。
我开始认为我在这里遗漏了一些非常微不足道的东西,但是在盯着它看了五个小时之后,我仍然不明白我哪里出了问题?
最佳答案
SetMetadata 应该按预期工作。但仅仅获取对 blob 的引用不足以读取元数据。
获取blob引用后,需要调用FetchAttributes CloudBlob 上的方法。这将加载所有属性和元数据,只有这样您才能访问之前设置的元数据:
// Get a reference to a blob.
CloudBlob blob = blobClient.GetBlobReference("mycontainer/myblob.txt");
// Populate the blob's attributes.
blob.FetchAttributes();
// Enumerate the blob's metadata.
foreach (var metadataKey in blob.Metadata.Keys)
{
Console.WriteLine("Metadata name: " + metadataKey.ToString());
Console.WriteLine("Metadata value: " + blob.Metadata.Get(metadataKey.ToString()));
}
关于c# - 即使我调用 CloudBlob.SetMetadata,Blob 元数据也不会保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13031149/