Получение списка больших двоичных объектов с помощью .NET

В этой статье показано, как получить список больших двоичных объектов с помощью клиентской библиотеки службы хранилища Azure для .NET.

Предварительные требования

  • В этой статье предполагается, что у вас уже есть проект, настроенный для работы с клиентской библиотекой Хранилище BLOB-объектов Azure для .NET. Дополнительные сведения о настройке проекта, включая установку пакета, добавление using директив и создание авторизованного клиентского объекта, см. в статье Начало работы с Хранилище BLOB-объектов Azure и .NET.
  • Механизм авторизации должен иметь разрешения на перечисление больших двоичных объектов. Дополнительные сведения см. в руководстве по авторизации для следующей операции REST API:

Сведения о параметрах перечисления BLOB-объектов

При перечислении больших двоичных объектов из кода можно указать ряд параметров для управления способом возврата результатов из службы хранилища Azure. Можно указать число возвращаемых результатов в каждом наборе результатов, а затем извлечь последующие наборы. Можно указать префикс для возврата больших двоичных объектов, имена которых начинаются с указанного символа или строки. Кроме того, можно создать неструктурированный или структурированный список больших двоичных объектов. В структурированном списке большие двоичные объекты представлены так, будто они организованы по папкам.

Чтобы получить список больших двоичных объектов в учетной записи хранения, вызовите один из следующих методов:

Управление количеством возвращаемых результатов

По умолчанию операция получения списка возвращает не более 5000 результатов за раз, но вы можете определить количество возвращаемых результатов для каждой операции получения списка. Представленные в этой статье примеры демонстрируют постраничное получение результатов. Дополнительные сведения о концепциях разбиения на страницы см. в статье Разбиение на страницы с помощью пакета Azure SDK для .NET.

Фильтрация результатов с помощью префикса

Чтобы отфильтровать список больших двоичных объектов, укажите строковое значение для параметра prefix. Строка префикса может содержать один или несколько символов. Служба хранилища Azure возвращает только те большие двоичные объекты, имена которых начинаются с этого префикса.

Возврат метаданных

Метаданные большого двоичного объекта можно вернуть с результатами, указав значение Метаданные для перечисления BlobTraits.

Неструктурированный список и структурированный список

Большие двоичные объекты находятся в службе хранилища Azure в неструктурированном виде, без использования какой-либо иерархии (например, как в классической файловой системе). Однако большие двоичные объекты можно упорядочить по виртуальным каталогам, чтобы имитировать структуру папок. Виртуальный каталог образует часть имени большого двоичного объекта и обозначается символом-разделителем.

Чтобы упорядочить большие двоичные объекты по виртуальным каталогам, используйте символ-разделитель в имени большого двоичного объекта. Символом-разделителем по умолчанию является косая черта (/), однако в качестве разделителя можно указать любой символ.

Если присвоить большим двоичным объектам имена с использованием разделителя, можно выбрать получение структурированного списка больших двоичных объектов. Для этого служба хранилища Azure возвращает все виртуальные каталоги и большие двоичные объекты под родительским объектом. Операцию перечисления можно вызвать рекурсивно для прохода по иерархии, подобно тому, как осуществляется программный обход классической файловой системы.

Использование неструктурированного списка

По умолчанию операция перечисления возвращает большие двоичные объекты в виде неструктурированного списка. В неструктурированном списке большие двоичные объекты не упорядочиваются по виртуальным каталогам.

В следующем примере выводится неструктурированный список больших двоичных объектов в указанном контейнере с указанным необязательным размером сегмента и записывается имя большого двоичного объекта в окно консоли.

private static async Task ListBlobsFlatListing(BlobContainerClient blobContainerClient, 
                                               int? segmentSize)
{
    try
    {
        // Call the listing operation and return pages of the specified size.
        var resultSegment = blobContainerClient.GetBlobsAsync()
            .AsPages(default, segmentSize);

        // Enumerate the blobs returned for each page.
        await foreach (Page<BlobItem> blobPage in resultSegment)
        {
            foreach (BlobItem blobItem in blobPage.Values)
            {
                Console.WriteLine("Blob name: {0}", blobItem.Name);
            }

            Console.WriteLine();
        }
    }
    catch (RequestFailedException e)
    {
        Console.WriteLine(e.Message);
        Console.ReadLine();
        throw;
    }
}

Выходные данные аналогичны следующим:

Blob name: FolderA/blob1.txt
Blob name: FolderA/blob2.txt
Blob name: FolderA/blob3.txt
Blob name: FolderA/FolderB/blob1.txt
Blob name: FolderA/FolderB/blob2.txt
Blob name: FolderA/FolderB/blob3.txt
Blob name: FolderA/FolderB/FolderC/blob1.txt
Blob name: FolderA/FolderB/FolderC/blob2.txt
Blob name: FolderA/FolderB/FolderC/blob3.txt

Примечание

В примере выходных данных предполагается, что у вас есть учетная запись хранения с неструктурированным пространством имен. Если вы включили функцию иерархического пространства имен для учетной записи хранения, каталоги не будут виртуальными. Это будут реальные независимые объекты. В результате каталоги отображаются в списке как большие двоичные объекты нулевой длины.

Альтернативный вариант перечисления при работе с иерархическим пространством имен см. в разделе Перечисление содержимого каталога (Azure Data Lake Storage 2-го поколения).

Использование иерархического списка

При вызове операции иерархического перечисления служба хранилища Azure возвращает виртуальные каталоги и большие двоичные объекты на первом уровне иерархии.

Чтобы получить иерархический список больших двоичных объектов, вызовите метод BlobContainerClient.GetBlobsByHierarchy или BlobContainerClient.GetBlobsByHierarchyAsync.

В следующем примере выводится иерархический список больших двоичных объектов в указанном контейнере с необязательным размером сегмента, а имя большого двоичного объекта отображается в окне консоли.

private static async Task ListBlobsHierarchicalListing(BlobContainerClient container, 
                                                       string prefix, 
                                                       int? segmentSize)
{
    try
    {
        // Call the listing operation and return pages of the specified size.
        var resultSegment = container.GetBlobsByHierarchyAsync(prefix:prefix, delimiter:"/")
            .AsPages(default, segmentSize);

        // Enumerate the blobs returned for each page.
        await foreach (Page<BlobHierarchyItem> blobPage in resultSegment)
        {
            // A hierarchical listing may return both virtual directories and blobs.
            foreach (BlobHierarchyItem blobhierarchyItem in blobPage.Values)
            {
                if (blobhierarchyItem.IsPrefix)
                {
                    // Write out the prefix of the virtual directory.
                    Console.WriteLine("Virtual directory prefix: {0}", blobhierarchyItem.Prefix);

                    // Call recursively with the prefix to traverse the virtual directory.
                    await ListBlobsHierarchicalListing(container, blobhierarchyItem.Prefix, null);
                }
                else
                {
                    // Write out the name of the blob.
                    Console.WriteLine("Blob name: {0}", blobhierarchyItem.Blob.Name);
                }
            }

            Console.WriteLine();
        }
    }
    catch (RequestFailedException e)
    {
        Console.WriteLine(e.Message);
        Console.ReadLine();
        throw;
    }
}

Выходные данные аналогичны следующим:

Virtual directory prefix: FolderA/
Blob name: FolderA/blob1.txt
Blob name: FolderA/blob2.txt
Blob name: FolderA/blob3.txt

Virtual directory prefix: FolderA/FolderB/
Blob name: FolderA/FolderB/blob1.txt
Blob name: FolderA/FolderB/blob2.txt
Blob name: FolderA/FolderB/blob3.txt

Virtual directory prefix: FolderA/FolderB/FolderC/
Blob name: FolderA/FolderB/FolderC/blob1.txt
Blob name: FolderA/FolderB/FolderC/blob2.txt
Blob name: FolderA/FolderB/FolderC/blob3.txt

Примечание

При выполнении операции иерархического перечисления не выводятся моментальные снимки больших двоичных объектов.

Получение списка больших двоичных объектов или моментальных снимков

Чтобы получить список версий больших двоичных объектов или моментальных снимков, укажите параметр BlobStates в поле Версия или Моментальный снимок. Версии и моментальные снимки перечисляются в порядке от более старых к более новым.

В следующем примере кода показано, как получить список версий BLOB-объектов.

private static void ListBlobVersions(BlobContainerClient blobContainerClient, 
                                           string blobName)
{
    try
    {
        // Call the listing operation, specifying that blob versions are returned.
        // Use the blob name as the prefix. 
        var blobVersions = blobContainerClient.GetBlobs
            (BlobTraits.None, BlobStates.Version, prefix: blobName)
            .OrderByDescending(version => version.VersionId).Where(blob => blob.Name == blobName);

        // Construct the URI for each blob version.
        foreach (var version in blobVersions)
        {
            BlobUriBuilder blobUriBuilder = new BlobUriBuilder(blobContainerClient.Uri)
            {
                BlobName = version.Name,
                VersionId = version.VersionId
            };

            if ((bool)version.IsLatestVersion.GetValueOrDefault())
            {
                Console.WriteLine("Current version: {0}", blobUriBuilder);
            }
            else
            {
                Console.WriteLine("Previous version: {0}", blobUriBuilder);
            }
        }
    }
    catch (RequestFailedException e)
    {
        Console.WriteLine(e.Message);
        Console.ReadLine();
        throw;
    }
}

Ресурсы

Дополнительные сведения о перечислении больших двоичных объектов с помощью клиентской библиотеки Хранилище BLOB-объектов Azure для .NET см. в следующих ресурсах.

Операции REST API

Пакет Azure SDK для .NET содержит библиотеки, которые создаются на основе REST API Azure, что позволяет взаимодействовать с операциями REST API через знакомые парадигмы .NET. Методы клиентской библиотеки для перечисления больших двоичных объектов используют следующую операцию REST API:

Ресурсы клиентской библиотеки

См. также раздел