【问题标题】:Set Azure Metadata on BlockBlob via REST API通过 REST API 在 BlockBlob 上设置 Azure 元数据
【发布时间】:2014-10-30 19:53:15
【问题描述】:

我想使用 Azure REST API 在 Azure 上的 Blob 上设置一些自定义元数据属性。 文件的上传工作正常(也通过 REST API 完成)。为了设置我的自定义元数据,我关注了these instructions。示例 URL 可以是:

(PUT 方法) https://myaccount.blob.core.windows.net/ph0wzj1k4dbuwfusyqw38z2jgfk5p56bfnlj5/a5bc77a8d4d34edeb6d3212fc6bbd8a9.jpg?sv=2014-02-14&sr=c&si=BlobContainer&sig=someSignaturecomp=metadata

使用此请求标头:

x-ms-meta-logicalname:20141028_064011.jpg

无论我是通过 jquery ajax 还是通过 Fiddler 运行此 url,我总是得到相同的结果:调用似乎是成功的(我得到 200 状态代码)但是如果那时我检查 blob 元数据(使用 C# 代码)关键未找到且元数据为空。

相反,如果我使用 C# 进行所有操作,我可以根据需要设置和获取我的 blob 上的任何元数据。

示例 C# 代码(现在可以使用):

var blobs = container.ListBlobs(null, true, BlobListingDetails.Metadata).Cast<CloudBlockBlob>();
foreach (var blob in blobs) {
    Console.WriteLine(blob.Metadata["logicalname"]);
}

如您所见,我在 url 中输入了共享访问签名,而不是在请求标头中,如说明所示,但我怀疑这是问题所在,因为在上传和其他操作(也在表存储上)时一切正常.

我做错了吗? (显然是的,但是什么?... :))

已解决:

使用 Azure 存储资源管理器进行调查,我看到元数据已正确设置并且存在,只是没有通过 C# 检索。感谢 Gaurav 的建议,我已经编辑了我发布的 C# 代码示例,现在正在检索我通过 REST API 设置的元数据。

【问题讨论】:

  • 能分享一下通过C#获取blob元数据的代码吗?
  • 使用 C# 示例编辑帖子

标签: javascript rest azure


【解决方案1】:

元数据在那里,但您无法看到它,因为您还没有获取它。您可以做的是更改ListBlobs() 电话。假设您使用的是最新版本的存储客户端库,您可以执行以下操作:

var blobs = container.ListBlobs(null, true, BlobListingDetails.Metadata).Cast<CloudBlockBlob>();

这将填充元数据以及其他属性。

【讨论】:

  • 我再次编辑了我的帖子。我使用 azure storage explorer 进行了调查,该值实际上是存在的,但即使使用您的方法,C# 检索到的元数据仍然是空的。至少现在我知道该值已设置,我将继续调查。当然,如果你有其他建议欢迎他们:)
  • ok 解决了不再需要执行 GetBlockBlobReference 来获取元数据。我已经相应地编辑了我的 C# 示例代码
猜你喜欢
  • 1970-01-01
  • 2014-08-28
  • 2016-07-11
  • 1970-01-01
  • 2018-07-14
  • 1970-01-01
  • 2020-02-21
  • 2021-09-03
  • 2021-03-19
相关资源
最近更新 更多