从 Azure 存储 Blob 访问元数据

Posted

技术标签:

【中文标题】从 Azure 存储 Blob 访问元数据【英文标题】:Accessing metadata from azure storage blob 【发布时间】:2017-09-16 01:42:13 【问题描述】:

我似乎找不到访问 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 的属性进行验证。

任何帮助表示赞赏。

【问题讨论】:

【参考方案1】:

在列出 blob 时,完全可以在 result 中获取元数据。您需要做的是在ListBlobs 方法调用中指定BlobListingDetails 参数并在那里指定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
  

请尝试一下。它应该可以工作。

【讨论】:

【参考方案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

【讨论】:

以上是关于从 Azure 存储 Blob 访问元数据的主要内容,如果未能解决你的问题,请参考以下文章

列出 Azure 存储容器中的 Blob,包括元数据

仅从 Azure 存储 [Azure-Blob][REST] 中的 Blob 列表获取特定元数据

访问元数据会导致 Azure 数据工厂的嵌套管道

使用 Azure 存储容器元数据作为搜索筛选器

如何更新 Azure.Storage.Blob 中的元数据

在 Azure Blob 存储中加密图像