[英]How to read all blobs from different path in one azure storage
我遵循了关于在 azure IoT Hub 中路由的微软教程,现在我所有来自 iot hub 的消息都存储在容器中的 blob 中。 但是,每个 blob 都位于单独的文件夹中。 例如,2018 年 11 月 3 日 19:53 发送的消息存储在 xyz/00/2018/11/03/19/53 blob 文件中。 如何从容器中的所有文件夹中获取所有 blob? 我不能使用 CloudBlobContainer.ListBlobs() 因为我没有这个方法。 我试过了:
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(StorageConnectionString);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer blobContainer = blobClient.GetContainerReference(storageContainerName);
CloudBlob blob = blobContainer.GetBlockBlobReference("xyz/00/2018/11/03/20/15");
MemoryStream stream = new MemoryStream();
await blob.DownloadToStreamAsync(stream);
return Encoding.UTF8.GetString(stream.ToArray());
并且此代码返回位于 xyz/00/2018/11/03/20/15 中的 blob 的内容但是,如果我尝试使用以下代码遍历 Blob,则它仅返回“https://{storageName}.blob.core。 windows.net/{containerName}/{xyz}/"
List<string> blobs = new List<string>();
BlobResultSegment resultSegment = blobContainer.ListBlobsSegmentedAsync(null).Result;
foreach (IListBlobItem item in resultSegment.Results)
{
if (item.GetType() == typeof(CloudBlockBlob))
{
CloudBlockBlob blob = (CloudBlockBlob)item;
blobs.Add(blob.Name);
}
else if (item.GetType() == typeof(CloudPageBlob))
{
CloudPageBlob blob = (CloudPageBlob)item;
blobs.Add(blob.Name);
}
else if (item.GetType() == typeof(CloudBlobDirectory))
{
CloudBlobDirectory dir = (CloudBlobDirectory)item;
blobs.Add(dir.Uri.ToString());
}
}
var result = String.Join(", ", blobs.ToArray());
return result;
我在这里缺少什么? 如何从容器中获取每个 blob?
使用过载ListBlobsSegmentedAsync
接受的useFlatBlobListing
和设置的值useFlatBlobListing
到true
:
使用FlatBlobListing
一个布尔值,指定是在平面列表中列出 blob,还是按虚拟目录分层列出 blob。
( 来源)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.