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


Копирование блоба по URL-адресу исходного объекта с помощью .NET

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

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

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

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

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

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

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

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

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

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

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

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

Копировать blob из URL-источника объекта

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

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

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

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

Скопируйте большой двоичный объект из источника внутри Azure

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

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

//-------------------------------------------------
// Copy a blob from the same storage account
//-------------------------------------------------
public static async Task CopyWithinStorageAccountAsync(
    BlobClient sourceBlob,
    BlockBlobClient destinationBlob)
{
    // Get the source blob URI and create the destination blob
    // overwrite param defaults to false
    await destinationBlob.SyncUploadFromUriAsync(sourceBlob.Uri/*, overwrite: false*/);
}

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

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

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

//-------------------------------------------------
// Copy a blob from an external source
//-------------------------------------------------
public static async Task CopyFromExternalSourceAsync(
    string sourceLocation,
    BlockBlobClient destinationBlob)
{
    Uri sourceUri = new(sourceLocation);

    // Create the destination blob from the source URL
    // overwrite param defaults to false
    await destinationBlob.SyncUploadFromUriAsync(sourceUri/*, overwrite: false*/);
}

Ресурсы

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

Примеры кода

Операции REST API

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

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

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