Partager via


Copier un objet blob à partir d’une URL d’objet source avec Python

Cet article explique comment copier un objet blob à partir d’une URL d’objet source à l’aide de la bibliothèque de client Stockage Azure pour Python. Vous pouvez copier un objet blob à partir d’une source du même compte de stockage, d’une source dans un autre compte de stockage ou de tout objet accessible récupéré via une requête HTTP GET sur une URL donnée.

Les méthodes de bibliothèque de client décrites dans cet article utilisent les opérations d’API REST Placer un blob à partir d’une URL et Placer un bloc à partir d’une URL. Ces méthodes sont recommandées pour les scénarios de copie dans lesquels vous souhaitez déplacer des données dans un compte de stockage et avoir une URL pour l’objet source. Pour les opérations de copie dans lesquelles vous souhaitez une planification asynchrone, consultez Copier un objet blob avec planification asynchrone avec Python.

Pour découvrir la copie de blobs en utilisant des API asynchrones, consultez Copier un objet blob à partir d’une URL d’objet source de manière asynchrone.

Prérequis

À propos de la copie de blob à partir d’une URL d’objet source

L’opération Put Blob From URL crée un objet blob de blocs où le contenu du blob est lu à partir d’une URL donnée. L’opération se termine de manière synchrone.

La source peut être n’importe quel objet récupérable via une requête HTTP GET standard sur l’URL donnée. Cela inclut les objets blob de blocs, les objets blob d’ajout, les objets blob de pages, les instantanés d’objets blob, les versions d’objets blob ou tout objet accessible à l’intérieur ou à l’extérieur d’Azure.

Lorsque l’objet source est un objet blob de blocs, tout le contenu de l’objet blob validé est copié. Le contenu de l’objet blob de destination est identique au contenu de la source, mais la liste de blocs validés n’est pas conservée et les blocs non validés ne sont pas copiés.

La destination est toujours un objet blob de blocs, existant ou nouveau créé par l’opération. Le contenu d’un blob existant est remplacé par le contenu du nouveau blob.

L’opération Put Blob From URL copie toujours l’intégralité du blob source. La copie d’une plage d’octets ou d’un ensemble de blocs n’est pas prise en charge. Pour effectuer des mises à jour partielles du contenu d’un objet blob de blocs à l’aide d’une URL source, utilisez l’API Placer un bloc à partir d’une URL avec Put Block List.

Pour en savoir plus sur l’opération Put Blob From URL, y compris les limitations de taille d’objet blob et les considérations relatives à la facturation, consultez Remarques sur la mise en place d’un objet blob à partir d’une URL.

Copier un blob à partir d’une URL d’objet source

Cette section fournit une vue d’ensemble des méthodes fournies par la bibliothèque de client Stockage Azure pour Python pour effectuer une opération de copie à partir d’une URL d’objet source.

La méthode suivante encapsule l’opération d’API REST Put Blob From URL et crée un objet blob de blocs où le contenu de l’objet blob est lu à partir d’une URL donnée :

Ces méthodes sont recommandées pour les scénarios où vous souhaitez déplacer des données dans un compte de stockage et avoir une URL pour l’objet source.

Pour les objets volumineux, vous pouvez choisir d’utiliser des blocs individuels. La méthode suivante encapsule l’opération d’API REST Put Block From URL. Cette méthode crée un bloc à commiter dans le cadre d’un objet blob où le contenu est lu à partir d’une URL source :

Copier un objet blob depuis une source dans Azure

Si vous copiez un objet blob depuis une source dans Azure, l’accès à l’objet blob source peut être autorisé au travers de Microsoft Entra ID, une signature d’accès partagé (SAS) ou une clé de compte.

L’exemple suivant illustre un scénario de copie d’un objet blob source dans Azure. La méthode upload_blob_from_url peut éventuellement accepter un paramètre booléen pour indiquer si un objet blob existant doit être remplacé, comme indiqué dans l’exemple.

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)

Copier un blob à partir d’une source extérieure à Azure

Vous pouvez effectuer une opération de copie sur n’importe quel objet source qui peut être récupéré via une requête HTTP GET sur une URL donnée, y compris les objets accessibles extérieurs à Azure. L’exemple suivant illustre un scénario de copie d’un blob à partir d’une URL d’objet source accessible.

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)

Copier un objet blob à partir d’une URL d’objet source de manière asynchrone

La bibliothèque de client Stockage Blob Azure pour Python prend en charge la d’un objet blob à partir d’une URL d’objet source de manière asynchrone. Pour en savoir plus sur les exigences de configuration de projet, consultez programmation asynchrone.

Suivez ces étapes pour copier un objet blob à partir d’une URL d’objet source en utilisant des API de manière asynchrone :

  1. Ajoutez les instructions d’importation suivantes :

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient, BlobClient
    
  2. Ajoutez du code pour exécuter le programme à l’aide de asyncio.run. Cette fonction exécute la coroutine passée, main() dans notre exemple et gère la boucle d’événement asyncio. Les coroutines sont déclarées avec la syntaxe asynchrone/await. Dans cet exemple, la coroutine main() crée d’abord BlobServiceClient de niveau supérieur en utilisant async with, puis appelle la méthode qui copie un objet blob à partir d’une URL source. Notez que seul le client de niveau supérieur doit utiliser async with, car d’autres clients créés à partir de celui-ci partagent le même pool de connexions.

    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())
    
  3. Ajoutez un code pour copier un objet blob à partir d’une URL source. L’exemple de code suivant est identique à l’exemple synchrone, sauf que la méthode est déclarée avec le mot clé async et que le mot clé await est utilisé lors de l’appel de la méthode 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)
    

Avec cette configuration de base en place, vous pouvez implémenter d’autres exemples dans cet article en tant que coroutines à l’aide de la syntaxe asynchrone/await.

Ressources

Pour en savoir plus sur la copie d’objets blob à l’aide de la bibliothèque de client Stockage Blob Azure pour Python, consultez les ressources suivantes.

Opérations de l'API REST

Le kit de développement logiciel (SDK) Azure pour Python contient des bibliothèques qui s’appuient sur l’API REST Azure, vous permettant d’interagir avec les opérations de l’API REST par le biais de paradigmes Python familiers. Les méthodes de bibliothèque de client décrites dans cet article utilisent les opérations d’API REST suivantes :

Exemples de code

Ressources de bibliothèque cliente