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


Копирование большого двоичного объекта из URL-адреса исходного объекта с помощью Go

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

Методы клиентской библиотеки, описанные в этой статье, используют операции Put Blob From URL и Put Block From URL REST API. Эти методы предпочтительны для сценариев копирования, в которых требуется переместить данные в учетную запись хранения и иметь URL-адрес исходного объекта. Операции копирования, в которых требуется асинхронное планирование, см. в разделе "Копирование большого двоичного объекта с асинхронным планированием с помощью Go".

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

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

Если у вас нет существующего проекта, в этом разделе показано, как настроить проект для работы с клиентским модулем Хранилище 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-объектов хранилища ролей или более поздней версии. Дополнительные сведения см. в руководстве по авторизации для put BLOB-адрес из URL-адреса или URL-адреса put block from.

Сведения о копировании БОЛЬШИХ двоичных объектов из URL-адреса исходного объекта

Операция Put Blob From URL создает новый блочный BLOB-объект, в котором содержимое большого двоичного объекта считываются из заданного URL-адреса. Операция выполняется синхронно.

Источник может быть любым объектом, извлекаемым через стандартный HTTP-запрос GET по указанному URL-адресу. К ним относятся блочные BLOB-объекты, добавление больших двоичных объектов, страничные BLOB-объекты, моментальные снимки BLOB-объектов, версии BLOB-объектов или любой доступный объект внутри Или за пределами Azure.

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

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

Операция Put Blob From URL всегда копирует весь исходный большой двоичный объект. Копирование диапазона байтов или набора блоков не поддерживается. Чтобы выполнить частичные обновления содержимого блочного BLOB-объекта с помощью исходного URL-адреса, используйте API put Block From URL вместе Put Block Listс .

Дополнительные сведения об Put Blob From URL операции, включая ограничения размера BLOB-объектов и рекомендации по выставлению счетов, см. в статье Put Blob From URL-примечания.

Копирование большого двоичного объекта из URL-адреса исходного объекта

В этом разделе представлен обзор методов, предоставляемых клиентской библиотекой служба хранилища Azure для Go для выполнения операции копирования из URL-адреса исходного объекта.

Следующий метод упаковывает операцию PUT BLOB-объекта из REST API URL-адреса и создает новый блочный BLOB-объект, в котором содержимое большого двоичного объекта считывается из заданного URL-адреса :

Этот метод предпочтителен для сценариев, в которых требуется переместить данные в учетную запись хранения и иметь URL-адрес исходного объекта.

Для больших объектов можно использовать отдельные блоки. В следующем методе выполняется оболочка операции PUT Block From URL REST API. Этот метод создает новый блок для фиксации в составе большого двоичного объекта, в котором содержимое считывается из исходного URL-адреса:

Копирование большого двоичного объекта из источника в Azure

Если вы копируете большой двоичный объект из источника в Azure, доступ к исходному BLOB-объекту можно авторизовать с помощью идентификатора Microsoft Entra (рекомендуется), подписанного URL-адресом (SAS) или ключа учетной записи.

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

func copyFromSourceURL(srcBlob *blockblob.Client, destBlob *blockblob.Client) {
    // Set copy options
    copyOptions := blockblob.UploadBlobFromURLOptions{
        Tier: to.Ptr(blob.AccessTierCool),
    }

    // Copy the blob from the source URL to the destination blob
    _, err := destBlob.UploadBlobFromURL(context.TODO(), srcBlob.URL(), &copyOptions)
    handleError(err)
}

В следующем примере показан пример использования:

// TODO: replace <storage-account-name> placeholders with actual storage account names
srcURL := "https://<src-storage-account-name>.blob.core.windows.net/"
destURL := "https://<dest-storage-account-name>.blob.core.windows.net/"

credential, err := azidentity.NewDefaultAzureCredential(nil)
handleError(err)

srcClient, err := azblob.NewClient(srcURL, credential, nil)
handleError(err)
destClient, err := azblob.NewClient(destURL, credential, nil)
handleError(err)

srcBlob := srcClient.ServiceClient().NewContainerClient("source-container").NewBlockBlobClient("source-blob")
destBlob := destClient.ServiceClient().NewContainerClient("destination-container").NewBlockBlobClient("destination-blob-1")

copyFromSourceURL(srcBlob, destBlob)

Копирование большого двоичного объекта из источника за пределами Azure

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

func copyFromExternalSource(srcURL string, destBlob *blockblob.Client) {
    // Set copy options
    copyOptions := blockblob.UploadBlobFromURLOptions{
        Tier: to.Ptr(blob.AccessTierCool),
    }

    // Copy the blob from the source URL to the destination blob
    _, err := destBlob.UploadBlobFromURL(context.TODO(), srcURL, &copyOptions)
    handleError(err)
}

В следующем примере показан пример использования:

externalURL := "<source-url>"

destBlob = destClient.ServiceClient().NewContainerClient("destination-container").NewBlockBlobClient("destination-blob-2")

copyFromExternalSource(externalURL, destBlob)

Ресурсы

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

Примеры кода

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

Операции REST API

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

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

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