如何在Azure Blob存储中列出容器?

13

我正在开发一款社交网络应用。

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

同样地,对于用户2,将在Azure Blob storage中创建container 2,然后将用户2的个人资料以xml格式保存和个人头像,对于10个用户也是如此,将有10个容器。

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

我正在使用webservice,但我面临的挑战是如何收集位于9个不同容器中的所有9个用户个人资料信息。

4个回答

43
以下代码应该可以解决问题 -
            CloudStorageAccount account =
            CloudStorageAccount.FromConfigurationSetting("DataConnectionString");
        // We need to access blobs now, so create a CloudBlobClient
        CloudBlobClient blobClient = account.CreateCloudBlobClient();

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

12

对于较新版本的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 Storage版本,请使用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

1
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(); 

请编辑那个答案并详细解释你正在做什么,并确保在代码行前放置空格。请查看https://stackoverflow.com/help/how-to-answer并阅读如何格式化您的编辑。 - Nic3500

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接