列出 Azure blob 存储中不同目录的 blob

Posted

技术标签:

【中文标题】列出 Azure blob 存储中不同目录的 blob【英文标题】:list blobs of different directory in Azure blob Storage 【发布时间】:2021-12-21 01:28:02 【问题描述】:

我们有以下文件夹结构,我们在 Azure 数据湖中存储了数据。

我想列出 Data 目录中存在的所有 blob。 IE。 abc.txt,xyz.txt,lmn.txt,abc1.txt,xyz1.txt,lmn1.txt,abc2.txt,xyz2.txt,lmn2.txt,gh.txt,kim.txt,tae.txt,.. ..

我怎样才能获得仅在数据目录中的所有 blob?

Azure 中的文件夹结构图像:

我想从每年和每月的文件夹中获取所有用户的数据文件夹中存在的所有 blob。

代码:

using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
using System;
using System.Collections.Generic;

namespace DataLake

   class Program
     
      static void Main(string[] args)
      
          CloudStorageAccount storageAccount = CloudStorageAccount.Parse("connection string");
        CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
        CloudBlobContainer container = blobClient.GetContainerReference("dev");


        List<string> blobnames = new List<string>();

        var allblobs = container.ListBlobs(useFlatBlobListing: true);
        foreach (var b in allblobs)
        
            //Console.WriteLine("\t" + b.Uri);
            string name = ((CloudBlockBlob)b).Name;
      //      Console.WriteLine(name);
            string[] names = name.Split('/');
            blobnames.Add(names[names.Length - 1]);

        
        foreach (var data in blobnames)
        
            Console.WriteLine(data);
        


    

输出:

【问题讨论】:

您能指定您使用的编程语言吗? 我正在使用c#来实现这个 【参考方案1】:

尝试使用useFlatBlobListing

我在我的系统中进行了测试,尝试使用此代码

  using Microsoft.Azure.Storage;
using Microsoft.Azure.Storage.Blob;
using System;

using System.Collections.Generic;
using System.IO;

namespace BlobList

    class Program
    
        static void Main(string[] args)
        




            CloudStorageAccount storageAccount = CloudStorageAccount.Parse("Connection String");
            CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
            CloudBlobContainer container = blobClient.GetContainerReference("test");


            List<string> blobnames = new List<string>();
            //var allblobs = container.ListBlobs(prefix: "test1/test2", useFlatBlobListing: true);
            var allblobs = container.ListBlobs(useFlatBlobListing: true);
            foreach (var b in allblobs)
            
                //Console.WriteLine("\t" + b.Uri);
                string name = ((CloudBlockBlob)b).Name;
                Console.WriteLine(name);
                string[] names = name.Split('/');
                blobnames.Add(names[names.Length - 1]);




            
            foreach (var data in blobnames)
            
                Console.WriteLine(data);
            


        


    

我尝试创建与您相同的文件夹结构

输出

【讨论】:

我按照您的建议使用,但没有得到预期的响应。我已经编辑了你可以在那里查看的问题。 嗨 vaishali,您评论了拆分操作。请删除该 cmets,您能否复制我在回答中提到的相同代码。再试一次,让我知道您仍然面临问题。 我删除了我得到相同响应的 cmets。也编辑了有问题的内容。 并评论 'Console.WriteLine(name); 这一行 它还提供了所有文件夹名称和其他文件夹中存在的 blob

以上是关于列出 Azure blob 存储中不同目录的 blob的主要内容,如果未能解决你的问题,请参考以下文章

列出并恢复软删除的 blob - azure python

在 Node.js 中列出来自 Azure Blob 存储和 Readstream 的 Blob

列出存储容器内容时获取 Azure 存储以返回 blob URL

C# Azure.Storage.Blobs SDK 如何列出和压缩容器中的所有文件并将压缩文件存储在另一个容器中

列出WPF应用程序中ListBox中的Azure blob

通过带有 SAS 令牌的 Power Shell 列出 Azure Blob 容器中文件夹中的文件