Скачивание большого двоичного объекта с помощью Go
В этой статье показано, как скачать большой двоичный объект с помощью клиентского модуля служба хранилища Azure для Go. Данные BLOB-объектов можно скачать в различные места назначения, включая локальный путь к файлу, поток или текстовую строку.
Необходимые компоненты
- Подписка Azure — создайте бесплатную учетную запись.
- Учетная запись хранения Azure — создайте такую учетную запись.
- Go 1.18+
Настройка среды
Если у вас нет существующего проекта, в этом разделе показано, как настроить проект для работы с клиентским модулем Хранилище 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-объекта (REST API)
Ресурсы модуля клиента
Связанный контент
- Эта статья является частью руководства разработчика хранилища BLOB-объектов для Go. Дополнительные сведения см. в полном списке статей руководства разработчика по созданию приложения Go.