从Azure存储Blob访问元数据

din*_*tom 2 c# metadata azure

我似乎找不到在Azure存储中访问单个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
  }
Run Code Online (Sandbox Code Playgroud)

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

任何帮助表示赞赏。

use*_*952 5

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

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


Gau*_*tri 5

列出斑点时,完全有可能获取结果中的元数据。您需要做的是BlobListingDetailsListBlobs方法调用中指定参数并在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
  }
Run Code Online (Sandbox Code Playgroud)

尝试一下。它应该工作。