Как составить список контейнеров в хранилище Azure BLOB? - PullRequest
9 голосов
/ 10 декабря 2011

Я занимаюсь разработкой приложения для социальной сети.

Я хочу создать в хранилище Azure контейнер для каждого пользователя (клиента), присоединяющегося к социальной сети, что означает, что у user1 есть контейнер с именем container 1, а внутри контейнера 1 будет профиль 1 пользователя в формате xml и аватарка пользователя 1.

Аналогично, для user2 в хранилище BLOB-объектов Azure будет создан контейнер 2, а затем профиль пользователя 2 будет сохранен в формате xml и изображение профиля пользователя 2, и все будет так, например, для 10 пользователей. 10 контейнеров.

Если я хочу перечислить информацию о всех 9 пользователях, хранящихся в хранилище Azure, в 9 разных контейнерах из пользовательского клиента 1, как я могу это сделать?

Я использую веб-сервис, но передо мной стоит задача собрать все 9 данных профиля пользователя, расположенных в 9 разных контейнерах.

Ответы [ 3 ]

44 голосов
/ 11 декабря 2011

Следующее должно сделать трюк -

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

        IEnumerable<CloudBlobContainer> containers = blobClient.ListContainers();
4 голосов
/ 13 июля 2018

Для более новых версий 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();

Для получения дополнительной информации, пожалуйста, обратитесь к MSDN и Блог Балкана

Для более старых версий хранилища 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();
0 голосов
/ 26 октября 2017
CloudStorageAccount account =
    CloudStorageAccount.FromConfigurationSetting("DataConnectionString");

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

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

// This will return you list of containers
var containerList = containers.Select(e => e.Name).Tolist(); 
...