Поделиться через


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

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

Необходимые компоненты

Настройка среды

Если у вас нет существующего проекта, в этом разделе показано, как настроить проект для работы с клиентской библиотекой Хранилище BLOB-объектов Azure для .NET. Ниже приведены шаги по установке пакета, добавлению using директив и созданию авторизованного клиентского объекта. Дополнительные сведения см. в статье "Начало работы с Хранилище BLOB-объектов Azure и .NET".

Установка пакетов

В каталоге проекта установите пакеты для клиентских библиотек Хранилище BLOB-объектов Azure и удостоверений Azure с помощью dotnet add package команды. Пакет Azure.Identity необходим для бессерверных подключений к службам Azure.

dotnet add package Azure.Storage.Blobs
dotnet add package Azure.Identity

Добавьте директивы using.

Добавьте эти using директивы в начало файла кода:

using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Azure.Storage.Blobs.Specialized;

Для некоторых примеров кода в этой статье могут потребоваться дополнительные using директивы.

Создание клиентского объекта

Чтобы подключить приложение к хранилищу BLOB-объектов, создайте экземпляр BLOBServiceClient. В следующем примере показано, как создать клиентский объект с помощью DefaultAzureCredential авторизации:

public BlobServiceClient GetBlobServiceClient(string accountName)
{
    BlobServiceClient client = new(
        new Uri($"https://{accountName}.blob.core.windows.net"),
        new DefaultAzureCredential());

    return client;
}

Вы можете зарегистрировать клиент службы для внедрения зависимостей в приложении .NET.

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

Авторизация

Механизм авторизации должен иметь необходимые разрешения для выполнения операции скачивания. Для авторизации с помощью идентификатора Microsoft Entra (рекомендуется), требуется встроенное средство чтения данных BLOB-объектов хранилища ролей Azure RBAC или более поздней версии. Дополнительные сведения см. в руководстве по авторизации для получения BLOB-объектов (REST API).

Скачивание большого двоичного объекта

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

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

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

В следующем примере большой двоичный объект загружается в локальный путь к файлу. Если указанный каталог не существует, код создает исключение 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();
}

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

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

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:

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

Ресурсы

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

Примеры кода

Операции REST API

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

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

См. также

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