Kopírování objektu blob ze zdrojové adresy URL objektu pomocí Pythonu
Tento článek ukazuje, jak zkopírovat objekt blob ze zdrojové adresy URL objektu pomocí klientské knihovny služby Azure Storage pro Python. Objekt blob můžete zkopírovat ze zdroje ve stejném účtu úložiště, ze zdroje v jiném účtu úložiště nebo z libovolného přístupného objektu načteného prostřednictvím požadavku HTTP GET na dané adrese URL.
Metody klientské knihovny popsané v tomto článku používají operace Put Blob From URL a Put Block From URL REST API. Tyto metody jsou upřednostňované pro scénáře kopírování, ve kterých chcete přesunout data do účtu úložiště a mít adresu URL zdrojového objektu. Operace kopírování, ve kterých chcete asynchronní plánování, najdete v tématu Kopírování objektu blob s asynchronním plánováním pomocí Pythonu.
Další informace o kopírování objektů blob pomocí asynchronních rozhraní API najdete v tématu Asynchronní kopírování objektu blob ze zdrojové adresy URL objektu.
Požadavky
- Předplatné Azure – vytvoření bezplatného předplatného
- Účet úložiště Azure – Vytvoření účtu úložiště
- Python 3.8 nebo novější
Nastavení prostředí
Pokud nemáte existující projekt, v této části se dozvíte, jak nastavit projekt pro práci s klientskou knihovnou Azure Blob Storage pro Python. Další podrobnosti najdete v tématu Začínáme se službou Azure Blob Storage a Pythonem.
Pokud chcete pracovat s příklady kódu v tomto článku, nastavte projekt pomocí následujícího postupu.
Instalace balíčků
Nainstalujte následující balíčky pomocí pip install
:
pip install azure-storage-blob azure-identity
Přidání příkazů importu
Přidejte následující příkazy import
:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import (
BlobServiceClient,
BlobClient,
)
Autorizace
Autorizační mechanismus musí mít potřebná oprávnění k provedení operace kopírování. K autorizaci pomocí Microsoft Entra ID (doporučeno) potřebujete předdefinovanou roli Přispěvatel dat objektů blob služby Azure RBAC nebo vyšší. Další informace najdete v pokynech k autorizaci pro put blob from URL (REST API) nebo put Block From URL (REST API).
Vytvoření objektu klienta
Pokud chcete připojit aplikaci ke službě Blob Storage, vytvořte instanci BlobServiceClient. Následující příklad ukazuje, jak vytvořit objekt klienta pro DefaultAzureCredential
autorizaci:
# 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)
Můžete také vytvořit klientské objekty pro konkrétní kontejnery nebo objekty blob, a to buď přímo, nebo z objektu BlobServiceClient
. Další informace o vytváření a správě klientských objektů najdete v tématu Vytváření a správa klientských objektů, které pracují s datovými prostředky.
Kopírování objektů blob z adresy URL zdrojového objektu
Operace Put Blob From URL
vytvoří nový objekt blob bloku, ve kterém se obsah objektu blob načte z dané adresy URL. Operace se dokončí synchronně.
Zdrojem může být libovolný objekt, který lze načíst prostřednictvím standardního požadavku HTTP GET na dané adrese URL. To zahrnuje objekty blob bloku, doplňovací objekty blob, objekty blob stránky, snímky objektů blob, verze objektů blob nebo jakýkoli přístupný objekt uvnitř Nebo mimo Azure.
Pokud je zdrojovým objektem objekt blob bloku, zkopíruje se veškerý potvrzený obsah objektu blob. Obsah cílového objektu blob je shodný s obsahem zdroje, ale seznam potvrzených bloků se nezachová a nepotvrzené bloky se nekopírují.
Cílem je vždy objekt blob bloku, existující objekt blob bloku nebo nový objekt blob bloku vytvořený operací. Obsah existujícího objektu blob se přepíše obsahem nového objektu blob.
Operace Put Blob From URL
vždy kopíruje celý zdrojový objekt blob. Kopírování rozsahu bajtů nebo sady bloků se nepodporuje. Pokud chcete provádět částečné aktualizace obsahu objektu blob bloku pomocí zdrojové adresy URL, použijte společně s Put Block List
rozhraním API adresy URL Put Block From .
Další informace o Put Blob From URL
operaci, včetně omezení velikosti objektů blob a aspektů fakturace, najdete v tématu Poznámky k vložení objektu blob z adresy URL.
Zkopírování objektu blob z adresy URL zdrojového objektu
Tato část poskytuje přehled metod poskytovaných klientskou knihovnou azure Storage pro Python k provedení operace kopírování z adresy URL zdrojového objektu.
Následující metoda zabalí operaci Put Blob From URL REST API a vytvoří nový objekt blob bloku, ve kterém se obsah objektu blob načte z dané adresy URL:
Tyto metody jsou upřednostňované pro scénáře, kdy chcete přesunout data do účtu úložiště a mít adresu URL zdrojového objektu.
U velkých objektů se můžete rozhodnout pracovat s jednotlivými bloky. Následující metoda zabalí operaci PUT Block From URL REST API. Tato metoda vytvoří nový blok, který se potvrdí jako součást objektu blob, kde se obsah načítá ze zdrojové adresy URL:
Kopírování objektu blob ze zdroje v Azure
Pokud kopírujete objekt blob ze zdroje v Rámci Azure, je možné přístup ke zdrojovému objektu blob autorizovat prostřednictvím ID Microsoft Entra, sdíleného přístupového podpisu (SAS) nebo klíče účtu.
Následující příklad ukazuje scénář kopírování zdrojového objektu blob v Rámci Azure. Metoda upload_blob_from_url může volitelně přijmout logický parametr, který označuje, jestli má být existující objekt blob přepsán, jak je znázorněno v příkladu.
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)
Kopírování objektu blob ze zdroje mimo Azure
Operaci kopírování můžete provést u libovolného zdrojového objektu, který lze načíst prostřednictvím požadavku HTTP GET na danou adresu URL, včetně přístupných objektů mimo Azure. Následující příklad ukazuje scénář kopírování objektu blob z adresy URL přístupného zdrojového objektu.
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)
Asynchronní kopírování objektu blob ze zdrojové adresy URL objektu
Klientská knihovna Azure Blob Storage pro Python podporuje asynchronní kopírování objektu blob ze zdrojové adresy URL. Další informace o požadavcích na nastavení projektu najdete v tématu Asynchronní programování.
Pomocí následujících kroků zkopírujte objekt blob ze zdrojové adresy URL objektu pomocí asynchronních rozhraní API:
Přidejte následující příkazy importu:
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient, BlobClient
Přidejte kód pro spuštění programu pomocí
asyncio.run
. Tato funkce spustí předanou korutinu vmain()
našem příkladu a spravuje smyčkuasyncio
událostí. Koroutiny jsou deklarovány syntaxí async/await. V tomto příkladumain()
korutin nejprve vytvoří nejvyšší úroveňBlobServiceClient
pomocíasync with
a pak zavolá metodu, která zkopíruje objekt blob ze zdrojové adresy URL. Mějte na paměti, že pouze klient nejvyšší úrovně musí používatasync with
, protože ostatní klienti, kteří z něj vytvořili, sdílejí stejný fond připojení.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())
Přidejte kód pro zkopírování objektu blob ze zdrojové adresy URL. Následující příklad kódu je stejný jako synchronní příklad s tím rozdílem, že metoda je deklarována pomocí
async
klíčovéhoawait
slova a klíčové slovo se používá při voláníupload_blob_from_url
metody.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)
S tímto základním nastavením můžete implementovat další příklady v tomto článku jako koruty pomocí syntaxe async/await.
Zdroje informací
Další informace o kopírování objektů blob pomocí klientské knihovny azure Blob Storage pro Python najdete v následujících zdrojích informací.
Ukázky kódu
- Zobrazení synchronních nebo asynchronních ukázek kódu z tohoto článku (GitHub)
Operace rozhraní REST API
Sada Azure SDK pro Python obsahuje knihovny, které jsou postavené na rozhraní Azure REST API a umožňují interakci s operacemi rozhraní REST API prostřednictvím známých paradigmat Pythonu. Metody klientské knihovny popsané v tomto článku používají následující operace rozhraní REST API:
- Vložení objektu blob z adresy URL (REST API)
- Put Block From URL (REST API)
Prostředky klientské knihovny
Související obsah
- Tento článek je součástí příručky pro vývojáře služby Blob Storage pro Python. Další informace najdete v úplném seznamu článků příručky pro vývojáře na webu Sestavení aplikace v Pythonu.