几个小时以来,我一直试图在使用Azure SDK创建的Blob上设置一些元数据。我使用BeginUploadFromStream()
异步上传了数据,并且一切正常。上传完成后,我可以使用其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引用之后,您需要在该CloudBlob上调用FetchAttributes方法。这将加载所有属性和元数据,只有如此,您才能访问之前设置的元数据:
// 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/