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


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

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

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

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

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

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

Чтобы работать с примерами кода в этой статье, выполните следующие действия, чтобы настроить проект.

Примечание.

В этой статье используется средство сборки Maven для создания и запуска примера кода. Для работы с пакетами SDK Azure для Java есть и другие средства сборки, например Gradle.

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

Откройте файл pom.xml в текстовом редакторе. Установите пакеты, включив файл BOM или включив прямую зависимость.

Добавьте инструкции импорта

Добавьте следующие утверждения import :

import com.azure.storage.blob.*;
import com.azure.storage.blob.specialized.*;

Авторизация

Механизм авторизации должен иметь необходимые разрешения для выполнения операции копирования. Для авторизации с помощью Microsoft Entra ID (рекомендуется), требуется встроенная роль Azure RBAC Storage Blob Data Contributor или выше. Дополнительные сведения см. в руководстве по авторизации для PUT BLOB из URL (REST API) или PUT BLOCK из URL (REST API).

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

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

В следующем примере используется BLOBServiceClientBuilder для создания BlobServiceClient объекта с помощью DefaultAzureCredentialи показано, как создать клиенты контейнеров и BLOB-объектов при необходимости:

// Azure SDK client builders accept the credential as a parameter
// TODO: Replace <storage-account-name> with your actual storage account name
BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
        .endpoint("https://<storage-account-name>.blob.core.windows.net/")
        .credential(new DefaultAzureCredentialBuilder().build())
        .buildClient();

// If needed, you can create a BlobContainerClient object from the BlobServiceClient
BlobContainerClient containerClient = blobServiceClient
        .getBlobContainerClient("<container-name>");

// If needed, you can create a BlobClient object from the BlobContainerClient
BlobClient blobClient = containerClient
        .getBlobClient("<blob-name>");

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

О копировании объектов BLOB из URL-адреса исходного объекта

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

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

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

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

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

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

Скопируйте объект BLOB из URL-адреса исходного объекта

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

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

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

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

Копирование blob из источника в Azure

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

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

public void copyFromSourceInAzure(BlobClient sourceBlob, BlockBlobClient destinationBlob) {
    // Get the source blob URL and create the destination blob
    // set overwrite param to true if you want to overwrite an existing blob
    destinationBlob.uploadFromUrl(sourceBlob.getBlobUrl(), false);
}

Метод uploadFromUrlWithResponse также может принять параметр BlobUploadFromUrlOptions , чтобы указать дополнительные параметры операции.

Скопировать BLOB из внешнего источника

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

public void copyFromExternalSource(String sourceURL, BlockBlobClient destinationBlob) {
    // Create the destination blob from the source URL
    // set overwrite param to true if you want to overwrite an existing blob
    destinationBlob.uploadFromUrl(sourceURL, false);
}

Ресурсы

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

Примеры кода

Операции REST API

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

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

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