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

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

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

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

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

Установка модулей

Установите модуль azblob с помощью следующей команды:

go get github.com/Azure/azure-sdk-for-go/sdk/storage/azblob

Чтобы выполнить проверку подлинности с помощью идентификатора Microsoft Entra (рекомендуется), установите azidentity модуль с помощью следующей команды:

go get github.com/Azure/azure-sdk-for-go/sdk/azidentity

Добавление путей импорта

В файле кода добавьте следующие пути импорта:

import (
    "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
	"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)

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

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

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

func getServiceClientTokenCredential(accountURL string) *azblob.Client {
    // Create a new service client with token credential
    credential, err := azidentity.NewDefaultAzureCredential(nil)
    handleError(err)

    client, err := azblob.NewClient(accountURL, credential, nil)
    handleError(err)

    return client
}

Авторизация

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

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

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

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

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

func downloadBlobToFile(client *azblob.Client, containerName string, blobName string) {
    // Create or open a local file where we can download the blob
    file, err := os.Create("path/to/sample/file")
    handleError(err)

    // Download the blob to the local file
    _, err = client.DownloadFile(context.TODO(), containerName, blobName, file, nil)
    handleError(err)
}

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

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

func downloadBlobToStream(client *azblob.Client, containerName string, blobName string) {
    // Download the blob
    get, err := client.DownloadStream(context.TODO(), containerName, blobName, nil)
    handleError(err)

    downloadedData := bytes.Buffer{}
    retryReader := get.NewRetryReader(context.TODO(), &azblob.RetryReaderOptions{})
    _, err = downloadedData.ReadFrom(retryReader)
    handleError(err)

    err = retryReader.Close()
    handleError(err)

    // Print the contents of the blob we created
    fmt.Println("Blob contents:")
    fmt.Println(downloadedData.String())
}

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

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

  • BlockSize: размер каждого блока при скачивании блочного большого двоичного объекта. Значение по умолчанию — 4 МБ.
  • Concurrency: максимальное количество параллельных подключений, используемых во время скачивания. Значение по умолчанию равно 5.

Эти параметры доступны при скачивании с помощью следующих методов:

Метод DownloadStream не поддерживает эти параметры и загружает данные в одном запросе.

Дополнительные сведения об ограничениях размера передачи для хранилища BLOB-объектов см. в разделе "Целевые объекты масштабирования" для хранилища BLOB-объектов.

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

func downloadBlobTransferOptions(client *azblob.Client, containerName string, blobName string) {
    // Create or open a local file where we can download the blob
    file, err := os.Create("path/to/sample/file")
    handleError(err)

    // Download the blob to the local file
    _, err = client.DownloadFile(context.TODO(), containerName, blobName, file,
        &azblob.DownloadFileOptions{
            BlockSize:   int64(4 * 1024 * 1024), // 4 MiB
            Concurrency: uint16(2),
        })
    handleError(err)
}

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

Примечание.

Примеры кода в этом руководстве предназначены для начала работы с Хранилище BLOB-объектов Azure и Go. Необходимо изменить обработку ошибок и Context значения в соответствии с потребностями приложения.

Ресурсы

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

Примеры кода

  • Просмотр примеров кода из этой статьи (GitHub)

Операции REST API

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

Ресурсы модуля клиента

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