Kopieren eines Blobs über eine Quellobjekt-URL mit Python
In diesem Artikel wird gezeigt, wie Sie ein Blob über eine Quellobjekt-URL mithilfe der Azure Storage-Clientbibliothek für Python kopieren. Sie können ein Blob aus einer Quelle innerhalb desselben Speicherkontos, aus einer Quelle in einem anderen Speicherkonto oder aus einem beliebigen zugänglichen Objekt kopieren, das über eine HTTP GET-Anforderung für eine bestimmte URL abgerufen wird.
Die in diesem Artikel behandelten Clientbibliotheksmethoden verwenden die REST-API-Vorgänge Put Blob From URL und Put Block From URL. Diese Methoden werden für Kopierszenarien bevorzugt, in denen Sie Daten in ein Speicherkonto verschieben möchten und über eine URL für das Quellobjekt verfügen. Informationen zu Kopiervorgängen mit asynchroner Planung finden Sie unter Kopieren eines Blobs mit asynchroner Planung mithilfe von Python.
Informationen zum Kopieren von Blobs mithilfe asynchroner APIs finden Sie unter Asynchrones Kopieren eines Blobs aus einer Quellobjekt-URL.
Voraussetzungen
- Azure-Abonnement – Erstellen eines kostenlosen Kontos
- Azure Storage-Konto – Erstellen eines Speicherkontos
- Ab Python 3.8
Erstellen Ihrer Umgebung
Wenn Sie kein vorhandenes Projekt haben, wird in diesem Abschnitt gezeigt, wie Sie ein Projekt für die Arbeit mit der Azure Blob Storage-Clientbibliothek für Python einrichten. Weitere Details finden Sie unter Erste Schritte mit Azure Blob Storage und Python.
Um die Codebeispiele in diesem Artikel zu verwenden, führen Sie die folgenden Schritte zum Einrichten Ihres Projekts aus.
Installieren von Paketen
Installieren Sie die folgenden Pakete mittels pip install
:
pip install azure-storage-blob azure-identity
Hinzufügen von Importanweisungen
Fügen Sie die folgenden import
-Anweisungen ein:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import (
BlobServiceClient,
BlobClient,
)
Autorisierung
Der Autorisierungsmechanismus muss über die erforderlichen Berechtigungen zum Ausführen eines Kopiervorgangs verfügen. Für die Autorisierung mit Microsoft Entra ID (empfohlen) benötigen Sie mindestens die integrierte Azure RBAC-Rolle Mitwirkender an Storage-Blobdaten. Weitere Informationen finden Sie in den Autorisierungsanleitungen für Put Blob From URL (REST API) oder Put Block From URL (REST API).
Erstellen eines Clientobjekts
Um eine App mit Blob Storage zu verbinden, erstellen Sie eine Instanz von BlobServiceClient. Das folgende Beispiel zeigt, wie Sie ein Clientobjekt mithilfe von DefaultAzureCredential
für die Autorisierung erstellen:
# 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)
Sie können auch Clientobjekte für bestimmte Container oder Blobs erstellen, entweder direkt oder aus dem BlobServiceClient
-Objekt. Weitere Informationen zum Erstellen und Verwalten von Clientobjekten finden Sie unter Erstellen und Verwalten von Clientobjekten, die mit Datenressourcen interagieren.
Informationen zum Kopieren von Blobs über eine Quellobjekt-URL
Der Vorgang Put Blob From URL
erstellt ein neues Blockblob, in dem der Inhalt des Blobs über eine bestimmte URL gelesen wird. Der Vorgang wird synchron ausgeführt.
Die Quelle kann ein beliebiges Objekt sein, das über eine HTTP GET-Standardanforderung für die angegebene URL abgerufen werden kann. Dies umfasst Blockblobs, Anfügeblobs, Seitenblobs, Blobmomentaufnahmen, Blobversionen und alle zugänglichen Objekte innerhalb oder außerhalb von Azure.
Wenn es sich bei dem Quellobjekt um ein Blockblob handelt, wird der gesamte committete Blobinhalt kopiert. Der Inhalt des Zielblobs ist identisch mit dem Inhalt der Quelle, aber die Liste committeter Blöcke wird nicht beibehalten, und nicht committete Blöcke werden nicht kopiert.
Das Ziel ist immer ein Blockblob, entweder ein vorhandenes Blockblob oder ein neues Blockblob, das durch den Vorgang erstellt wurde. Der Inhalt eines vorhandenen Blobs wird mit dem Inhalt des neuen Blobs überschrieben.
Der Vorgang Put Blob From URL
kopiert immer das gesamte Quellblob. Das Kopieren eines Bytebereichs oder einer Gruppe von Blöcken wird nicht unterstützt. Um Teilaktualisierungen des Inhalts eines Blockblobs mithilfe einer Quell-URL vorzunehmen, verwenden Sie die API Put Block From URL zusammen mit Put Block List
.
Weitere Informationen zum Vorgang Put Blob From URL
, einschließlich Blobgrößenbeschränkungen und Abrechnungsüberlegungen, finden Sie unter Hinweise.
Kopieren eines Blobs über eine Quellobjekt-URL
Dieser Abschnitt enthält einen Überblick über die Methoden, die von der Azure Storage-Clientbibliothek für Python bereitgestellt werden, um einen Kopiervorgang über eine Quellobjekt-URL auszuführen.
Die folgende Methode umschließt den REST-API-Vorgang Put Blob From URL, und sie erstellt ein neues Blockblob, in dem der Inhalt des Blobs über eine bestimmte URL gelesen wird:
Diese Methoden werden für Szenarien bevorzugt, in denen Sie Daten in ein Speicherkonto verschieben möchten und über eine URL für das Quellobjekt verfügen.
Bei großen Objekten können Sie mit einzelnen Blöcken arbeiten. Die folgende Methode umschließt den REST-API-Vorgang Put Block From URL. Mit dieser Methode wird ein neuer Block erstellt, der als Teil eines Blobs committet werden soll, in dem der Inhalt über eine Quell-URL gelesen wird:
Kopieren eines Blobs aus einer Quelle in Azure
Wenn Sie ein Blob aus einer Quelle in Azure kopieren, kann der Zugriff auf das Quellblob über Microsoft Entra ID, eine SAS (Shared Access Signature) oder einen Kontoschlüssel autorisiert werden.
Im folgenden Beispiel wird ein Szenario zum Kopieren eines Quellblobs innerhalb von Azure gezeigt. Die Methode upload_blob_from_url kann optional einen booleschen Parameter akzeptieren, um anzugeben, ob ein vorhandenes Blob überschrieben werden sollte, wie im Beispiel gezeigt wird.
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)
Kopieren eines Blobs aus einer Quelle außerhalb von Azure
Sie können einen Kopiervorgang für jedes Quellobjekt ausführen, das über eine HTTP GET-Anforderung für eine bestimmte URL abgerufen werden kann, einschließlich zugänglicher Objekte außerhalb von Azure. Das folgende Beispiel zeigt ein Szenario zum Kopieren eines Blobs über eine URL für zugängliche Quellobjekte.
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)
Asynchrones Kopieren eines Blobs aus einer Quellobjekt-URL
Die Azure Blob Storage-Clientbibliothek für Python unterstützt das asynchrone Kopieren von Blobs aus einer Quell-URL. Weitere Informationen zu den Projekteinrichtungsanforderungen finden Sie unter Asynchrone Programmierung.
Führen Sie die folgenden Schritte aus, um ein Blob mithilfe asynchroner APIs aus einer Quellobjekt-URL zu kopieren:
Fügen Sie die folgenden import-Anweisungen hinzu:
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient, BlobClient
Fügen Sie Code hinzu, um das Programm mithilfe von
asyncio.run
auszuführen. Diese Funktion führt die übergebene Coroutine aus,main()
in unserem Beispiel, und verwaltet die Ereignisschleife vonasyncio
. Coroutinen werden mit der async/await-Syntax deklariert. In diesem Beispiel erstellt die Coroutinemain()
zunächst die oberste Ebene vonBlobServiceClient
mitasync with
und ruft dann die Methode auf, die ein Blob aus einer Quell-URL kopiert. Beachten Sie, dass nur der Client auf oberster Ebeneasync with
verwenden muss, da andere von ihm erstellte Clients denselben Verbindungspool aufweisen.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())
Fügen Sie Code hinzu, um ein Blob aus einer Quell-URL zu kopieren. Das folgende Codebeispiel ist identisch mit dem synchronen Beispiel, mit der Ausnahme, dass die Methode mit dem Schlüsselwort „
async
“ deklariert wird und das Schlüsselwort „await
‘‘ beim Aufrufen der Methode „upload_blob_from_url
“ verwendet wird.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)
Mit dieser grundlegenden Einrichtung können Sie weitere Beispiele in diesem Artikel als Coroutinen mit async/await-Syntax implementieren.
Ressourcen
Weitere Informationen zum Kopieren von Blobs mithilfe der Azure Blob Storage-Clientbibliothek für Python finden Sie in den folgenden Ressourcen.
Codebeispiele
- Anzeigen synchroner oder asynchroner Codebeispiele aus diesem Artikel (GitHub)
REST-API-Vorgänge
Das Azure SDK für Python enthält Bibliotheken, die auf der Azure-REST-API basieren, und ermöglicht Ihnen so die Interaktion mit REST-API-Vorgängen über vertraute Python-Paradigmen. Die Clientbibliotheksmethoden, die in diesem Artikel behandelt werden, verwenden die folgenden REST-API-Vorgänge:
- Put Blob From URL (REST-API)
- Put Block From URL (REST-API)
Ressourcen zur Clientbibliothek
Zugehöriger Inhalt
- Dieser Artikel ist Teil des Blob Storage-Entwicklerleitfadens für Python. Weitere Informationen finden Sie in der vollständigen Liste der Entwicklerleitfadenartikel unter Erstellen Ihrer Python-App.