繁体   English   中英

如何列出 azure blob 存储中的容器?

[英]How to List the containers in azure blob storage?

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

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

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

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

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

以下应该可以解决问题 -

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

        IEnumerable<CloudBlobContainer> containers = blobClient.ListContainers();

对于较新版本的 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 的博客

对于较旧的 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();
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(); 

适用于 .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

暂无
暂无

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

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