从azure存储blob访问元数据

时间:2017-04-19 17:24:16

标签: c# azure metadata

我似乎找不到一种方法来访问Azure存储中blob的单个blob元数据。

FetchAttributes仅适用于整个容器。我的方法返回一个与我设置的参数匹配的blob列表。然后我需要遍历该列表并从每个blob中检索一些元数据,但我找不到任何方法。

这似乎是很多开销,但是我应该在创建容器对象时获取这些属性,然后过滤blob列表吗?

所以,我想我会试试,

 public static IEnumerable<GalleryPhoto> GetGalleryPhotos(string folderPath)
 {

        var container = CreateAzureContainer(containerName, false);
        container.FetchAttributes();
        var blobDirectory = container.GetDirectoryReference(folderPath);
        var photoGalleries = new List<GalleryPhoto>();
        var blobs = blobDirectory.ListBlobs().ToList();

       ...rest of code
  }

blob中的blob对象,显示0表示元数据计数。 每个项目都有元数据,通过查看Azure存储资源管理器中每个blob的属性进行验证。

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:4)

在列出blob时完全可以获取结果中的元数据。您需要做的是在BlobListingDetails方法调用中指定ListBlobs参数,并在那里指定BlobListingDetails.Metadata。这将做的是包括响应中每个blob的元数据。所以你的代码是:

public static IEnumerable<GalleryPhoto> GetGalleryPhotos(string folderPath)
 {

        var container = CreateAzureContainer(containerName, false);
        container.FetchAttributes();
        var blobDirectory = container.GetDirectoryReference(folderPath);
        var photoGalleries = new List<GalleryPhoto>();
        var blobs = blobDirectory.ListBlobs(false, BlobListingDetails.Metadata).ToList();

       ...rest of code
  }

试一试。它应该工作。

答案 1 :(得分:2)

var blobs = container.ListBlobs().OfType<CloudBlockBlob>().ToList();
foreach (var blob in blobs)
{
    blob.FetchAttributes(); //Now the metadata will be populated
}

请参阅https://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storage.blob.cloudblockblob.fetchattributes%28v=azure.10%29.aspx?f=255&MSPPError=-2147217396