Copiar un blob desde una dirección URL de objeto de origen con Python
En este artículo se muestra cómo copiar un blob desde una URL de objeto fuente mediante la librería cliente Azure Storage para Python. Puede copiar un blob desde un origen dentro de la misma cuenta de almacenamiento, desde un origen en una cuenta de almacenamiento diferente o desde cualquier objeto accesible recuperado a través de una solicitud HTTP GET en una dirección URL determinada.
Los métodos de biblioteca cliente descritos en este artículo usan las operaciones de la API de REST Put Blob From URL y Put Block From URL. Estos métodos se prefieren para copiar escenarios en los que desee mover datos a una cuenta de almacenamiento y tener una dirección URL para el objeto de origen. Para operaciones de copia en las que desee una programación asíncrona, consulte Copiar un blob con programación asíncrona mediante Python.
Para obtener información sobre cómo copiar blobs mediante API asincrónicas, consulte Copiar un blob desde una dirección URL de objeto de origen de forma asincrónica.
Requisitos previos
- Una suscripción a Azure: cree una cuenta gratuita
- Una cuenta de Azure Storage: cree una cuenta de almacenamiento
- Python 3.8 y versiones posteriores
Configurar el entorno
Si no tiene un proyecto existente, en esta sección se muestra cómo configurar uno para que funcione con la biblioteca cliente de Azure Blob Storage para Python. Para más información, vea Introducción a Azure Blob Storage y Python.
Para trabajar con los ejemplos de código de este artículo, siga los pasos siguientes a fin de configurar el proyecto.
Instalar paquetes
Instale los siguientes paquetes mediante pip install
:
pip install azure-storage-blob azure-identity
Adición de instrucciones import
Agregue las instrucciones siguientes import
:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import (
BlobServiceClient,
BlobClient,
)
Authorization
El mecanismo de autorización debe tener los permisos necesarios para realizar una operación de copia. Para la autorización con Microsoft Entra ID (recomendado) se necesita el rol integrado de RBAC de Azure de Colaborador de datos de Storage Blob o superior. Para obtener más información, consulte la guía de autorización para Poner blob desde una dirección URL (API de REST) o Poner un bloque desde una dirección URL (API de REST).
Creación de un objeto de cliente
Para conectar una aplicación a Blob Storage, cree una instancia de BlobServiceClient. En el ejemplo siguiente se muestra cómo crear un objeto de cliente mediante DefaultAzureCredential
para la autorización:
# 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)
También puede crear objetos de cliente para contenedores o blobs específicos ya sea directamente o desde el objeto BlobServiceClient
. Para obtener más información sobre cómo crear y administrar objetos de cliente, consulte Crear y administrar objetos de cliente que interactúan con los recursos de datos.
Acerca de copiar blobs desde una dirección URL de objeto de origen
La operación Put Blob From URL
crea un nuevo blob en bloques donde se lee el contenido del blob desde una dirección URL determinada. La operación se completa sincrónicamente.
El origen puede ser cualquier objeto recuperable a través de una solicitud HTTP GET estándar en la dirección URL especificada. Esto incluye blobs en bloques, blobs anexos, blobs en páginas, instantáneas de blobs, versiones de blobs o cualquier objeto accesible dentro o fuera de Azure.
Cuando el objeto de origen sea un blob en bloques, se copiará todo el contenido del blob confirmado. El contenido del blob de destino es idéntico al contenido del blob de origen, pero la lista de bloques comprometidos no se conserva y los bloques no comprometidos no se copian.
El destino siempre es un blob en bloques, ya sea un blob en bloques existente o un nuevo blob en bloques creado por la operación. El contenido de un blob existente se sobrescribe con el contenido del nuevo blob.
La operación Put Blob From URL
siempre copia todo el blob de origen. No se admite la copia de un intervalo de bytes o un conjunto de bloques. Para realizar actualizaciones parciales en el contenido de un blob en bloques mediante una dirección URL de origen, use la API Put Block From URL junto con Put Block List
.
Para obtener más información sobre la operación Put Blob From URL
, incluyendo las limitaciones de tamaño de blob y las consideraciones de facturación, consulte Comentarios de Put Blob From URL.
Copiar un blob desde una dirección URL de objeto de origen
Esta sección proporciona información general sobre los métodos proporcionados por la librería cliente de Azure Storage para Python para realizar una operación de copia desde una URL de objeto de origen.
El siguiente método envuelve la operación Put Blob From URL REST API, y crea un nuevo blob de bloque donde el contenido del blob es leído desde una URL determinada:
Estos métodos se prefieren para escenarios en los que desee mover datos a una cuenta de almacenamiento y tener una dirección URL para el objeto de origen.
En el caso de objetos grandes, puede optar por trabajar con bloques individuales. el método siguiente encapsula la operación de la API de REST Put Block From URL. Este método crea un nuevo bloque que se confirmará como parte de un blob donde el contenido se leerá desde una dirección URL de origen:
Copiar un blob desde un origen dentro de Azure
Si está copiando un blob desde un origen dentro de Azure, el acceso al blob de origen se puede autorizar a través de Microsoft Entra ID, una firma de acceso compartido (SAS) o una clave de cuenta.
En el ejemplo siguiente, se muestra un escenario para copiar un blob de origen dentro de Azure. El método upload_blob_from_url puede aceptar opcionalmente un parámetro booleano para indicar si se debe sobrescribir un blob existente, como se muestra en el ejemplo.
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)
Copiar un blob desde un origen externo a Azure
Puede realizar una operación de copia en cualquier objeto de origen que se pueda recuperar a través de solicitudes HTTP GET en una dirección URL determinada, incluyendo los objetos accesibles de fuera de Azure. En el ejemplo siguiente se muestra un escenario para copiar un blob desde una dirección URL de objeto de origen accesible.
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)
Copiar un blob desde una dirección URL de objeto de origen de forma asincrónica
La biblioteca cliente de Azure Blob Storage para Python admite copiar un blob desde una dirección URL de origen de forma asincrónica. Para obtener más información sobre los requisitos de configuración del proyecto, consulte Programación asincrónica.
Siga estos pasos para copiar un blob desde una dirección URL de objeto de origen mediante API asincrónicas:
Agregue las siguientes instrucciones import:
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient, BlobClient
Agregue código para ejecutar el programa mediante
asyncio.run
. Esta función ejecuta la corrutina pasada,main()
en nuestro ejemplo, y administra el bucle de eventosasyncio
. Las corrutinas se declaran con la sintaxis async/await. En este ejemplo, la corrutinamain()
crea primero el nivel superiorBlobServiceClient
medianteasync with
y, a continuación, llama al método que copia un blob desde una dirección URL de origen. Tenga en cuenta que solo el cliente de nivel superior debe usarasync with
, ya que otros clientes creados a partir de él comparten el mismo grupo de conexiones.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())
Agregue código para copiar un blob desde una dirección URL de origen. El siguiente código de ejemplo es el mismo que el ejemplo sincrónico, salvo que el método se declara con la palabra clave
async
y la palabra claveawait
se usa al llamar al métodoupload_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)
Con esta configuración básica, puede implementar otros ejemplos de este artículo como corrutinas mediante la sintaxis async/await.
Recursos
Para obtener más información sobre cómo descargar blobs usando la biblioteca cliente de Azure Blob Storage para Python, consulte los recursos siguientes.
Ejemplos de código
- Ver ejemplo de código sincrónicos o asincrónicos de este artículo (GitHub)
Operaciones de API REST
Azure SDK para Python contiene bibliotecas que se basan en la API REST de Azure, lo que le permite interactuar con las operaciones de API REST por medio de paradigmas de Python que ya conoce. Los métodos de biblioteca cliente descritos en este artículo usan las siguientes operaciones de la API de REST:
- Put Blob From URL (API REST)
- Put Block From URL (API de REST)
Recursos de la biblioteca cliente
- Documentación de referencia de la biblioteca cliente
- Código fuente de la biblioteca del cliente
- Paquete (PyPi)
Contenido relacionado
- Este artículo forma parte de la guía para desarrolladores de Blob Storage para Python. Para más información, consulte la lista completa de artículos de la guía para desarrolladores en Compilación de la aplicación de Python.