如何列出Azure blob存储中的子目录

Joh*_*y_D 8 list azure blobstorage subdirectory

MS已经宣布像blob存储一样的目录,我正试图像目录一样使用它.通过名称保存一些blob:

Common\Service1\Type1\Object1
Common\Service1\Type1\Object2
Common\Service1\Type2\Object1
Common\Service1\Type2\Object2
Common\Service1\Type3\Object1
Common\Service1\Type3\Object2
Common\Service1\Type3\Object3
Run Code Online (Sandbox Code Playgroud)

我想有可能枚举子目录,例如我有blobclient参考Common容器名称,我想得到子容器列表Type1, Type2, Type3.是否可以获取某些目录中的子目录列表.使用ListBlobs返回当前容器中的完整blob列表.

b2z*_*w2a 16

如果要列出"Common\Service1"目录中的所有"子目录",可以使用以下内容:

    var directory = blobContainer.GetDirectoryReference(@"Common/Service1");
    var folders = directory.ListBlobs().Where(b => b as CloudBlobDirectory != null).ToList();
    foreach (var folder in folders)
    {
        Console.WriteLine(folder.Uri);
    }
Run Code Online (Sandbox Code Playgroud)

完整代码示例:

    var random = new Random();
    CloudStorageAccount storageAccount = CloudStorageAccount.DevelopmentStorageAccount;
    var cloudBlobClient = storageAccount.CreateCloudBlobClient();
    CloudBlobContainer blobContainer = cloudBlobClient.GetContainerReference("test-container");
    blobContainer.CreateIfNotExists();
    string[] objects = new[]
                           {
                               @"Common\Service1\Type1\Object1", @"Common\Service1\Type1\Object2", @"Common\Service1\Type2\Object1",
                               @"Common\Service1\Type2\Object2", @"Common\Service1\Type3\Object1", @"Common\Service1\Type3\Object2",
                               @"Common\Service1\Type3\Object3"
                           };
    foreach (var newObject in objects)
    {
        var newBlob = blobContainer.GetBlockBlobReference(newObject);
        var buffer = new byte[1024];
        random.NextBytes(buffer);
        newBlob.UploadFromByteArray(buffer,0,buffer.Length);
    }

    var directory = blobContainer.GetDirectoryReference(@"Common/Service1");
    var folders = directory.ListBlobs().Where(b => b as CloudBlobDirectory != null).ToList();
    foreach (var folder in folders)
    {
        Console.WriteLine(folder.Uri);
    }
Run Code Online (Sandbox Code Playgroud)

这将为Type1,Type2和Type3目录输出Uri.


Dan*_*man 10

建立在b2zw2a的答案:

给你:

var directory = blobContainer.GetDirectoryReference("Common/Service1");
var folders = directory.ListBlobs().OfType<CloudBlobDirectory>();
foreach (var folder in folders)
{
    Console.WriteLine(folder.Uri);
}
Run Code Online (Sandbox Code Playgroud)