【问题标题】:How to List the containers in azure blob storage?如何列出 azure blob 存储中的容器?
【发布时间】:2012-01-17 12:38:00
【问题描述】:

我正在开发一个社交网络应用程序。

我想在 azure 存储中为每个加入社交网络的用户(客户端)创建一个容器,这意味着 user1 有一个名为 container 1 的容器,在容器 1 内会有 xml 格式的用户 1 个人资料和一个用户 1 的头像。

同样,对于 user2,将在 azure blob 存储中创建容器 2,然后将用户 2 配置文件保存为 xml 格式和用户 2 的配置文件图片,就像这样,假设有 10 个用户10 个容器。

如果我想列出存储在 Azure 存储中与用户客户端 1 不同的 9 个容器中的所有 9 个用户的信息,我该怎么做?

我正在使用网络服务,但我面临的挑战是如何收集位于 9 个不同容器中的所有 9 个用户配置文件信息。

【问题讨论】:

    标签: azure containers


    【解决方案1】:

    以下应该可以解决问题 -

                CloudStorageAccount account =
                CloudStorageAccount.FromConfigurationSetting("DataConnectionString");
            // We need to access blobs now, so create a CloudBlobClient
            CloudBlobClient blobClient = account.CreateCloudBlobClient();
    
            IEnumerable<CloudBlobContainer> containers = blobClient.ListContainers();
    

    【讨论】:

      【解决方案2】:

      对于较新版本的 Microsoft.WindowsAzure.Storage,请使用 CloudBlobClient.ListContainersSegmentedAsync 方法的正确变体。示例用法如下:

      private static async Task<IEnumerable<CloudBlobContainer>> ListContainersAsync(CloudBlobClient cloudBlobClient)
      {
          BlobContinuationToken continuationToken = null;
          var containers = new List<CloudBlobContainer>();
      
          do
          {
              ContainerResultSegment response = await cloudBlobClient.ListContainersSegmentedAsync(continuationToken);
              continuationToken = response.ContinuationToken;
              containers.AddRange(response.Results);
      
          } while (continuationToken != null);
      
          return containers;
      }
      

      上述方法的用法如下:

      string connectionString = "<your connection string>";
      CloudStorageAccount.TryParse(connectionString, out CloudStorageAccount storageAccount);
      
      if (storageAccount == null)
      {
          Console.WriteLine("Connection string did not work");
      }
      
      CloudBlobClient cloudBlobClient = storageAccount.CreateCloudBlobClient();
      var containers = await ListContainersAsync(cloudBlobClient);
      

      或者,您可以按如下方式创建扩展方法:

      public static class CloudBlobClientExtension
      {
          public static async Task<IEnumerable<CloudBlobContainer>> ListContainersAsync(this CloudBlobClient cloudBlobClient)
          {
              BlobContinuationToken continuationToken = null;
              var containers = new List<CloudBlobContainer>();
      
              do
              {
                  ContainerResultSegment response = await cloudBlobClient.ListContainersSegmentedAsync(continuationToken);
                  continuationToken = response.ContinuationToken;
                  containers.AddRange(response.Results);
      
              } while (continuationToken != null);
      
              return containers;
          }
      }
      

      上述扩展方法的用法如下:

      string connectionString = "<your connection string>";
      CloudStorageAccount.TryParse(connectionString, out CloudStorageAccount storageAccount);
      
      if (storageAccount == null)
      {
          Console.WriteLine("Connection string did not work");
      }
      
      CloudBlobClient cloudBlobClient = storageAccount.CreateCloudBlobClient();
      IEnumerable<CloudBlobContainer> containers = await cloudBlobClient.ListContainersAsync();
      

      更多详情请参考MSDNBalkan's Blog

      对于较旧的 Azure 存储版本,请使用 CloudBlobClient.ListContainers 方法。示例用法如下:

      string connectionString = "<your connection string>";
      CloudStorageAccount.TryParse(connectionString, out CloudStorageAccount storageAccount);
      
      if (storageAccount == null)
      {
          Console.WriteLine("Connection string did not work");
      }
      
      CloudBlobClient cloudBlobClient = storageAccount.CreateCloudBlobClient();
      var containers = cloudBlobClient.ListContainers();
      

      【讨论】:

        【解决方案3】:

        适用于 .NET 的 Azure Blob 存储客户端库 v12

        using Azure;
        using Azure.Storage.Blobs;
        
        BlobServiceClient blobServiceClient = new BlobServiceClient(azStorageConnString);
        var containerList = blobServiceClient.GetBlobContainers();
        
        foreach (var container in containerList)
          // doImportantWork
        

        【讨论】:

          【解决方案4】:
          CloudStorageAccount account =
              CloudStorageAccount.FromConfigurationSetting("DataConnectionString");
          
          // We need to access blobs now, so create a CloudBlobClient
          var blobClient = account.CreateCloudBlobClient();
          
          IEnumerable<CloudBlobContainer> containers = blobClient.ListContainers();
          
          // This will return you list of containers
          var containerList = containers.Select(e => e.Name).Tolist(); 
          

          【讨论】:

          猜你喜欢
          • 2016-01-27
          • 2019-10-25
          • 1970-01-01
          • 2015-12-19
          • 2015-03-08
          • 2012-03-02
          • 2022-01-05
          • 1970-01-01
          • 2019-08-17
          相关资源
          最近更新 更多