我似乎找不到一种方法来访问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的属性进行验证。
任何帮助表示感谢。
答案 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
}