Я хотел бы прочитать все файлы и папки в хранилище BLOB-объектов и отобразить их в моем приложении (ASP.NET CORE 2.1) в иерархической модели.
Вот мой метод действий
public async Task<ActionResult> List()
{
CloudBlobContainer container = GetCloudBlobContainer();
//List<string> blobs = new List<string>();
BlobResultSegment resultSegment = container.ListBlobsSegmentedAsync(null).Result;
var tree = new List<TreeNode>();
int i = 1;
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;
var response = await dir.ListBlobsSegmentedAsync(true, BlobListingDetails.None, int.MaxValue, null,
null, null);
tree.Add(new TreeNode
{
Id = i,
Key = dir.Prefix,
Name = dir.Prefix.TrimEnd('/'),
Url = dir.Uri.ToString(),
//HasChildren = response.Results.Any(),
//Children = response.Results.Select(x => new TreeNode
//{
// Key = x.StorageUri.PrimaryUri.ToString(),
// Name = x.StorageUri.SecondaryUri.ToString(),
// Url = x.Uri.ToString(),
// HasChildren = false
//}).ToList()
});
foreach (var blobItem in response.Results)
{
tree.Add(GetNode(blobItem, i));
}
//blobs.Add(dir.Uri.ToString());
i++;
}
}
return View(tree);
}
Класс TreeNode:
public class TreeNode
{
public int Id { get; set; }
public int? ParentId { get; set; }
public string Key { get; set; }
public string Name { get; set; }
public string Url { get; set; }
public string Type { get; set; }
public bool HasChildren { get; set; }
public virtual List<TreeNode> Children { get; set; }
public string ParentKey { get; set; }
}
Как рекурсивно прочитать детали элемента BLOB и построить дерево
Любая помощь будет принята с благодарностью.