【发布时间】:2019-04-07 23:03:39
【问题描述】:
我遵循了有关 Azure IoT Hub 中路由的 Microsoft 教程,现在我来自 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?
【问题讨论】:
标签: c# .net azure azure-storage azure-blob-storage