好的...我找到了一种方法来做到这一点,虽然它看起来有点笨拙和间接,但它确实实现了我认为应该可行的主要事情,即将 IListBlobItem 直接转换为 CloudBlockBlob 对象。
我正在做的是从 Directory 对象的 ListBlobs() 方法中获取列表,然后遍历列表中的每个项目并将项目转换为 CloudBlockBlob 对象,然后调用 FetchAttributes() 方法来检索属性(包括元数据) . 然后将一个新的“信息”对象添加到一个新的信息对象列表中。这是我正在使用的代码:
CloudBlobDirectory dir = container.GetDirectoryReference(dirPath);
var blobs = dir.ListBlobs(true);
foreach (IListBlobItem item in blobs)
{
CloudBlockBlob blob = (CloudBlockBlob)item;
blob.FetchAttributes();
files.Add(new ImageInfo
{
FileUrl = item.Uri.ToString(),
FileName = item.Uri.PathAndQuery.Replace(restaurantId.ToString().PadLeft(3, '0') + "/", ""),
ImageName = blob.Metadata["Name"]
});
}
整个“Blob”概念似乎不必要地复杂,并且似乎没有实现我所认为的 Blob 包装器的主要功能之一。也就是说,一种通过允许对名称、目录、容器和元数据进行查询来扩展搜索功能的方法。我原以为您可以构建一个 linq 查询,其内容类似于:“返回 'images' 容器中所有 blob 的列表,这些 blob 位于 'natural/landscapes/' 目录路径中,元数据键为 '类别',其值为'日落'”。似乎没有办法做到这一点,这对我来说似乎是一个错失的机会。那好吧。
如果我错了并且离基地很远,请告诉我。