Скачивание большого двоичного объекта с помощью .NET

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

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

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

Загрузка BLOB-объектов

Для скачивания большого двоичного объекта можно использовать любой из следующих способов:

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

Загрузка по пути к файлу

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

public static async Task DownloadBlobToFileAsync(
    BlobClient blobClient,
    string localFilePath)
{
    await blobClient.DownloadToAsync(localFilePath);
}

Скачивание в поток

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

public static async Task DownloadBlobToStreamAsync(
    BlobClient blobClient,
    string localFilePath)
{
    FileStream fileStream = File.OpenWrite(localFilePath);

    await blobClient.DownloadToAsync(fileStream);

    fileStream.Close();
}

Скачивание в строку

В следующем примере предполагается, что BLOB-объект является текстовым файлом, и он загружается в строку:

public static async Task DownloadBlobToStringAsync(BlobClient blobClient)
{
    BlobDownloadResult downloadResult = await blobClient.DownloadContentAsync();
    string blobContents = downloadResult.Content.ToString();
}

Скачивание из потока

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

public static async Task DownloadBlobFromStreamAsync(
    BlobClient blobClient,
    string localFilePath)
{
    using (var stream = await blobClient.OpenReadAsync())
    {
        FileStream fileStream = File.OpenWrite(localFilePath);
        await stream.CopyToAsync(fileStream);
    }
}

Скачивание блочного BLOB-объекта с параметрами конфигурации

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

Указание параметров передачи данных при скачивании

Значения можно настроить в StorageTransferOptions , чтобы повысить производительность операций передачи данных. В следующем примере кода показано, как задать значения для StorageTransferOptions и включить параметры в составе экземпляра BlobDownloadToOptions . Значения, приведенные в этом примере, не предназначены для рекомендации. Чтобы правильно настроить эти значения, необходимо учитывать конкретные потребности приложения.

public static async Task DownloadBlobWithTransferOptionsAsync(
    BlobClient blobClient,
    string localFilePath)
{
    FileStream fileStream = File.OpenWrite(localFilePath);

    var transferOptions = new StorageTransferOptions
    {
        // Set the maximum number of parallel transfer workers
        MaximumConcurrency = 2,

        // Set the initial transfer length to 8 MiB
        InitialTransferSize = 8 * 1024 * 1024,

        // Set the maximum length of a transfer to 4 MiB
        MaximumTransferSize = 4 * 1024 * 1024
    };

    BlobDownloadToOptions downloadOptions = new BlobDownloadToOptions()
    {
        TransferOptions = transferOptions
    };

    await blobClient.DownloadToAsync(fileStream, downloadOptions);

    fileStream.Close();
}

Дополнительные сведения о настройке параметров передачи данных см. в статье Настройка производительности при отправке и скачивании.

Указание параметров проверки передачи при скачивании

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

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

public static async Task DownloadBlobWithChecksumAsync(
    BlobClient blobClient,
    string localFilePath)
{
    FileStream fileStream = File.OpenWrite(localFilePath);

    var validationOptions = new DownloadTransferValidationOptions
    {
        AutoValidateChecksum = true,
        ChecksumAlgorithm = StorageChecksumAlgorithm.Auto
    };

    BlobDownloadToOptions downloadOptions = new BlobDownloadToOptions()
    {
        TransferValidation = validationOptions
    };

    await blobClient.DownloadToAsync(fileStream, downloadOptions);

    fileStream.Close();
}

В следующей таблице показаны доступные параметры для алгоритма контрольной суммы, определенные в StorageChecksumAlgorithm:

Имя Значение Описание
Auto 0 (рекомендуется). Позволяет библиотеке выбрать алгоритм. Разные версии библиотек могут выбирать разные алгоритмы.
None 1 Не выбран алгоритм. Не вычисляйте и не запрашивайте контрольные суммы.
MD5 2 Стандартный хэш-алгоритм MD5.
StorageCrc64 3 Настраиваемый 64-разрядный CRC службы хранилища Azure.

Ресурсы

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

Операции REST API

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

Примеры кода

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

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