c# - 即使我调用 CloudBlob.SetMetadata,Blob 元数据也不会保存

标签 c# asp.net azure azure-blob-storage azure-sdk-.net

几个小时以来,我一直在尝试在使用 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/

相关文章:

c# - Moq 使用 ReturnsAsync 并修改 It.IsAny 输入参数

asp.net - Selenium IDE click() 超时

azure - waIISHost 不会重新启动模拟的本地 azure

python - azureml 可以将变量从一个步骤传递到另一步骤吗?

c# - 如何在 datagridview 中插入新的 datagridview 行并在数据库中(自动)更新?

c# - 如何替换 Regex 表达式中的实际星号字符 (*)?

c# - 在 IIS 7.5 中托管的 Web Api 中找不到 HTTP 404 页面

asp.net - 在VS2010和TFS中为团队管理web.config

c# - 如何将强类型模型和模型列表同时传递给 View

Azure 网站 WebMatrix 添加现有文件呈灰色