繁体   English   中英

根据前缀获取天蓝色 blob 结构的完整层次结构

[英]Get complete hierarchy of azure blob structure based on prefix

我的 azure 存储容器中有以下层次结构:

Container  
-- Folder 1  
  -- Folder 2  
     -- Folder 2.1  
       -- File 1  
       -- File 2  
       -- File 3 

我正在寻找的是一个通用函数,我可以在其中传递字符串,例如“container/Folder1/Folder2”,它返回给我层次结构,即

-- Folder 2.1  
   -- File 1  
   -- File 2  
   -- File 3  

我有以下代码,但在此我无法将前缀作为“container/Folder1/Folder2”传递。 如果我在前缀字符串中添加“/”,那么它会抛出无效 uri 字符串的错误。

    static void printCloudDirectories(IEnumerable<IListBlobItem> blobList, Container cont)
    {
        foreach (var blobitem in blobList)
        {
            if (blobitem is CloudBlobDirectory)
            {
                var container = new Container();
                var directory = blobitem as CloudBlobDirectory;
                Console.WriteLine(directory.Prefix);
                container.Name = directory.Prefix;
                BlobContinuationToken token = null;
                var directories = directory.ListBlobsSegmentedAsync(token).Result.Results;
                printCloudDirectories(directories, container);
                cont.Containers.Add(container);
            }
            else
            {
                cont.Children.Add(blobitem.Uri.AbsoluteUri);
            }
        }
    }

    public static void ListClientMethod(CloudBlobClient cloudBlobClient)
    {
        BlobContinuationToken token = null;
        var containerSegments = cloudBlobClient.ListContainersSegmentedAsync(token).Result;
        List<Container> containers = new List<Container>();
        foreach (var container in containerSegments.Results)
        {
            Console.WriteLine("Container: " + container.Name);
            var cont = new Container();
            cont.Name = container.Name;
            // ADD A CALL TO printCloudDirectories:
            BlobContinuationToken token1 = null;
            var blobs = container.ListBlobsSegmentedAsync(token1).Result.Results;
            printCloudDirectories(blobs, cont);
            containers.Add(cont);
        }
    }
    public class Container
{
    public Container()
    {
        Children = new List<string>();
        Containers = new List<Container>();
    }

    public string Name { get; set; }

    public List<string> Children { get; set; }

    public List<Container> Containers { get; set; }
}

我使用 c# 作为编码语言

请使用ListBlobsSegmentedAsync(String, Boolean, BlobListingDetails, Nullable<Int32>, BlobContinuationToken, BlobRequestOptions, OperationContext)方法。

此方法的第一个参数是Blob Prefix ,您需要在那里指定Folder 1/Folder 2/

此方法的第二个参数是useFlatBlobListing ,您需要为此传递true

它应该为您返回如下结果:

Folder 1/Folder 2/Folder 2.1/File 1
Folder 1/Folder 2/Folder 2.1/File 2
Folder 1/Folder 2/Folder 2.1/File 3

并且您应该能够基于此构建所需的树视图。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM