通过REST API在BlockBlob上设置Azure元数据

时间:2014-10-30 11:13:02

标签: javascript rest azure

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

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

使用此请求标头:

X-MS-元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"]);
}

正如您所看到的,我已经在网址中输入了我的共享访问签名,而不是按照说明显示在请求标头中,但我怀疑这是问题,因为在上传和其他操作(也在桌面存储上)一切正常

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

解决:

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

1 个答案:

答案 0 :(得分:1)

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

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

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