Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье показано, как скопировать объект Blob из URL-адреса исходного объекта с помощью клиентской библиотеки Azure Storage для Python. Блоб можно скопировать из источника в той же учетной записи хранения, из источника в другой учетной записи хранения или из любого доступного объекта, выполненного через HTTP-запрос GET по указанному URL-адресу.
Методы клиентской библиотеки, описанные в этой статье, используют операции REST API: Put Blob From URL и Put Block From URL. Эти методы предпочтительны для сценариев копирования, в которых требуется переместить данные в учетную запись хранения и иметь URL-адрес исходного объекта. Операции копирования, в которых требуется асинхронное планирование, см. в статье "Копирование большого двоичного объекта с асинхронным планированием с помощью Python".
Сведения о копировании объектов BLOB с помощью асинхронных API см. статью «Асинхронное копирование объекта BLOB из URL-адреса исходного объекта».
Предварительные условия
- Подписка Azure — создайте бесплатную учетную запись.
- Учетная запись хранения Azure — создайте такую учетную запись.
- Python 3.8+
Настройка среды
Если у вас нет существующего проекта, в этом разделе показано, как настроить проект для работы с клиентской библиотекой Хранилище BLOB-объектов Azure для Python. Дополнительные сведения см. в статье «Начало работы с Blob-хранилищем Azure на Python».
Чтобы работать с примерами кода в этой статье, выполните следующие действия, чтобы настроить проект.
Установка пакетов
Установите следующие пакеты с помощью pip install
:
pip install azure-storage-blob azure-identity
Добавление инструкций импорта
Добавьте следующие операторы import
:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import (
BlobServiceClient,
BlobClient,
)
Авторизация
Механизм авторизации должен иметь необходимые разрешения для выполнения операции копирования. Для авторизации с помощью идентификатора Microsoft Entra (рекомендуется) требуется встроенная роль Azure RBAC "Storage Blob Data Contributor" или эквивалентная. Дополнительные сведения см. в руководстве по авторизации для Put Blob From URL (REST API) или Put Block From URL (REST API).
Создание клиентского объекта
Чтобы подключить приложение к хранилищу BLOB-объектов, создайте экземпляр BLOBServiceClient. В следующем примере показано, как создать клиентский объект с помощью DefaultAzureCredential
авторизации:
# TODO: Replace <storage-account-name> with your actual storage account name
account_url = "https://<storage-account-name>.blob.core.windows.net"
credential = DefaultAzureCredential()
# Create the BlobServiceClient object
blob_service_client = BlobServiceClient(account_url, credential=credential)
Можно также создавать клиентские объекты для определённых контейнеров или объектов BLOB напрямую или из BlobServiceClient
объекта. Дополнительные сведения о создании клиентских объектов и управлении ими см. в статье "Создание клиентских объектов и управление ими", взаимодействующих с ресурсами данных.
Сведения о копировании BLOB-объектов из URL-адреса исходного объекта
Операция Put Blob From URL
создает новый блочный BLOB-объект, в котором содержимое считывается из заданного URL-адреса. Операция выполняется синхронно.
Источник может быть любым объектом, извлекаемым через стандартный HTTP-запрос GET по указанному URL-адресу. К ним относятся блочные BLOB-объекты, дополняемые BLOB-объекты, страничные BLOB-объекты, моментальные снимки BLOB-объектов, версии BLOB-объектов или любой доступный объект внутри или за пределами Azure.
Когда исходный объект является блоковым блобом, копируется все закрепленное содержимое. Содержимое целевого блоба идентично содержимому исходного, но список зафиксированных блоков не сохраняется, а незафиксированные блоки не копируются.
Назначение всегда является блочного большого двоичного объекта, существующего блочного большого двоичного объекта или нового блочного большого двоичного объекта, созданного операцией. Содержимое существующего большого двоичного объекта перезаписывается с содержимым нового большого двоичного объекта.
Операция Put Blob From URL
всегда копирует весь исходный бинарный объект. Копирование диапазона байтов или набора блоков не поддерживается. Чтобы выполнить частичные обновления содержимого блочного BLOB-объекта, используя исходный URL-адрес, используйте API Put Block From URL с Put Block List
.
Дополнительные сведения об Put Blob From URL
операции, включая ограничения размера BLOB-объектов и рекомендации по выставлению счетов, см. в статье Put Blob From URL-примечания.
Копирование blob из URL-адреса исходного объекта
В этом разделе представлен обзор методов, предоставляемых клиентской библиотекой служба хранилища Azure для Python для выполнения операции копирования из URL-адреса исходного объекта.
Следующий метод оборачивает операцию Put Blob From URL REST API и создает новый блочный BLOB-объект, содержимое которого считывается из указанного URL-адреса.
Эти методы предпочтительны для сценариев, в которых требуется переместить данные в учетную запись хранения и иметь URL-адрес исходного объекта.
Для больших объектов можно работать с отдельными блоками. В следующем методе выполняется обертка для операции REST API Put Block From URL. Этот метод создает новый блок для фиксации в составе BLOB, в котором содержимое считывается из источникового URL-адреса:
Копирование большого двоичного объекта из источника в Azure
Если вы копируете объект BLOB из источника в Azure, доступ к исходному BLOB-объекту можно авторизовать с помощью Microsoft Entra ID, общей подписи доступа (SAS) или ключа учетной записи.
Следующий пример демонстрирует сценарий копирования исходного объекта BLOB в Azure. Метод upload_blob_from_url может опционально принять логический параметр, чтобы указать, следует ли перезаписывать существующий блоб, как показано в примере.
def copy_from_source_in_azure(self, source_blob: BlobClient, destination_blob: BlobClient):
# Get the source blob URL and create the destination blob
# set overwrite param to True if you want to overwrite existing blob data
destination_blob.upload_blob_from_url(source_url=source_blob.url, overwrite=False)
Копирование BLOB из внешнего источника за пределами Azure
Вы можете выполнить операцию копирования для любого исходного объекта, который можно получить через HTTP-запрос GET по указанному URL-адресу, включая доступные объекты за пределами Azure. В следующем примере представлен сценарий копирования объекта BLOB из доступного URL-адреса источника объекта.
def copy_from_external_source(self, source_url: str, destination_blob: BlobClient):
# Create the destination blob from the source URL
# set overwrite param to True if you want to overwrite existing blob data
destination_blob.upload_blob_from_url(source_url=source_url, overwrite=False)
Копирование большого двоичного объекта из URL-адреса исходного объекта асинхронно
Клиентская библиотека Azure Blob Storage для Python поддерживает асинхронное копирование BLOB из исходного URL-адреса. Дополнительные сведения о требованиях к настройке проекта см. в статье асинхронное программирование.
Выполните следующие шаги, чтобы скопировать блоб из URL источника, используя асинхронные API:
Добавьте в файл следующие операторы импорта:
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient, BlobClient
Добавьте код для запуска программы с помощью
asyncio.run
. Эта функция запускает переданную корутину вmain()
нашем примере и управляет цикломasyncio
событий. Объявление корутин происходит с использованием синтаксиса async/await. В этом примере корутина сначала создает верхний уровеньBlobServiceClient
с помощьюasync with
, а затем вызывает метод, копирующий большой двоичный объект из исходного URL-адреса. Обратите внимание, что использовать только клиент верхнего уровня, так как другие клиенты, созданные из него, используютasync with
тот же пул подключений.async def main(): sample = BlobCopySamples() # TODO: Replace <storage-account-name> with your actual storage account name account_url = "https://<storage-account-name>.blob.core.windows.net" credential = DefaultAzureCredential() async with BlobServiceClient(account_url, credential=credential) as blob_service_client: # Copy a blob from one container to another in the same storage account source = blob_service_client.get_blob_client(container="source-container", blob="sample-blob.txt") destination = blob_service_client.get_blob_client(container="destination-container", blob="sample-blob.txt") await sample.copy_from_source_in_azure(source_blob=source, destination_blob=destination) if __name__ == '__main__': asyncio.run(main())
Добавьте код для копирования большого двоичного объекта из исходного URL-адреса. Следующий пример кода совпадает с синхронным примером, за исключением того, что метод объявляется с
async
ключевым словом, аawait
ключевое слово используется при вызовеupload_blob_from_url
метода.async def copy_from_source_in_azure(self, source_blob: BlobClient, destination_blob: BlobClient): # Get the source blob URL and create the destination blob # set overwrite param to True if you want to overwrite existing blob data await destination_blob.upload_blob_from_url(source_url=source_blob.url, overwrite=False)
С помощью этой базовой настройки вы можете реализовать другие примеры в этой статье в качестве корутин с помощью синтаксиса async/await.
Ресурсы
Дополнительные сведения о копировании больших двоичных объектов с помощью клиентской библиотеки Хранилище BLOB-объектов Azure для Python см. в следующих ресурсах.
Примеры кода
- Просмотр примеров синхронного или асинхронного кода из этой статьи (GitHub)
Операции REST API
Пакет SDK Azure для Python содержит библиотеки, которые создаются на основе REST API Azure, что позволяет взаимодействовать с операциями REST API с помощью знакомых парадигм Python. Методы клиентской библиотеки, описанные в этой статье, используют следующие операции REST API:
- Вставка большого двоичного объекта из URL-адрес (REST API)
- Поставить блокировку из URL-адреса (REST API)
Ресурсы клиентской библиотеки
Связанный контент
- Эта статья является частью руководства разработчика хранилища BLOB-объектов для Python. Дополнительные сведения см. в полном списке статей руководства разработчика по созданию приложения Python.