Kopiera en blob från en url för källobjekt med Python
Den här artikeln visar hur du kopierar en blob från en källobjekt-URL med hjälp av Azure Storage-klientbiblioteket för Python. Du kan kopiera en blob från en källa inom samma lagringskonto, från en källa i ett annat lagringskonto eller från alla tillgängliga objekt som hämtas via HTTP GET-begäran på en viss URL.
De klientbiblioteksmetoder som beskrivs i den här artikeln använder rest-API-åtgärderna Put Blob From URL och Put Block From URL . Dessa metoder är att föredra för kopieringsscenarier där du vill flytta data till ett lagringskonto och ha en URL för källobjektet. Information om kopieringsåtgärder där du vill ha asynkron schemaläggning finns i Kopiera en blob med asynkron schemaläggning med Python.
Mer information om hur du kopierar blobar med asynkrona API:er finns i Kopiera en blob från en källobjekt-URL asynkront.
Förutsättningar
- Azure-prenumeration – skapa en kostnadsfritt
- Azure Storage-konto – skapa ett lagringskonto
- Python 3.8+
Konfigurera din miljö
Om du inte har ett befintligt projekt visar det här avsnittet hur du konfigurerar ett projekt för att arbeta med Azure Blob Storage-klientbiblioteket för Python. Mer information finns i Kom igång med Azure Blob Storage och Python.
Följ de här stegen för att konfigurera projektet om du vill arbeta med kodexemplen i den här artikeln.
Installera paket
Installera följande paket med :pip install
pip install azure-storage-blob azure-identity
Lägga till importinstruktioner
Lägg till följande import
-uttryck:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import (
BlobServiceClient,
BlobClient,
)
Auktorisering
Auktoriseringsmekanismen måste ha de behörigheter som krävs för att utföra en kopieringsåtgärd. För auktorisering med Microsoft Entra-ID (rekommenderas) behöver du den inbyggda rollen Storage Blob Data Contributor eller senare. Mer information finns i auktoriseringsvägledningen för Put Blob From URL (REST API) eller Put Block From URL (REST API).
Skapa ett klientobjekt
Om du vill ansluta en app till Blob Storage skapar du en instans av BlobServiceClient. I följande exempel visas hur du skapar ett klientobjekt med hjälp av DefaultAzureCredential
för auktorisering:
# 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)
Du kan också skapa klientobjekt för specifika containrar eller blobar, antingen direkt eller från objektet BlobServiceClient
. Mer information om hur du skapar och hanterar klientobjekt finns i Skapa och hantera klientobjekt som interagerar med dataresurser.
Om att kopiera blobar från en källobjekt-URL
Åtgärden Put Blob From URL
skapar en ny blockblob där innehållet i bloben läse från en viss URL. Åtgärden slutförs synkront.
Källan kan vara valfritt objekt som kan hämtas via en HTTP GET-standardbegäran på den angivna URL:en. Detta omfattar blockblobar, tilläggsblobar, sidblobar, blobögonblicksbilder, blobversioner eller alla tillgängliga objekt i eller utanför Azure.
När källobjektet är en blockblob kopieras allt incheckat blobinnehåll. Innehållet i målbloben är identiskt med källans innehåll, men listan över incheckade block bevaras inte och ej bekräftade block kopieras inte.
Målet är alltid en blockblob, antingen en befintlig blockblob eller en ny blockblob som skapats av åtgärden. Innehållet i en befintlig blob skrivs över med innehållet i den nya bloben.
Åtgärden Put Blob From URL
kopierar alltid hela källbloben. Kopiering av ett intervall med byte eller en uppsättning block stöds inte. Om du vill utföra partiella uppdateringar av en blockblobs innehåll med hjälp av en käll-URL använder du API:et Put Block From URL tillsammans med Put Block List
.
Mer information om åtgärden Put Blob From URL
, inklusive begränsningar för blobstorlek och faktureringsöverväganden, finns i Lägga till blob från URL-kommentarer.
Kopiera en blob från en url för källobjekt
Det här avsnittet ger en översikt över metoder som tillhandahålls av Azure Storage-klientbiblioteket för Python för att utföra en kopieringsåtgärd från en källobjekt-URL.
Följande metod omsluter rest-API-åtgärden Put Blob From URL och skapar en ny blockblob där innehållet i bloben läss från en viss URL:
Dessa metoder är att föredra för scenarier där du vill flytta data till ett lagringskonto och ha en URL för källobjektet.
För stora objekt kan du välja att arbeta med enskilda block. Följande metod omsluter rest-API-åtgärden Put Block From URL . Den här metoden skapar ett nytt block som ska checkas in som en del av en blob där innehållet läse från en käll-URL:
Kopiera en blob från en källa i Azure
Om du kopierar en blob från en källa i Azure kan åtkomst till källbloben auktoriseras via Microsoft Entra-ID, en signatur för delad åtkomst (SAS) eller en kontonyckel.
I följande exempel visas ett scenario för att kopiera en källblob i Azure. Metoden upload_blob_from_url kan också acceptera en boolesk parameter för att ange om en befintlig blob ska skrivas över, enligt exemplet.
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)
Kopiera en blob från en källa utanför Azure
Du kan utföra en kopieringsåtgärd på alla källobjekt som kan hämtas via HTTP GET-begäran på en viss URL, inklusive tillgängliga objekt utanför Azure. I följande exempel visas ett scenario för att kopiera en blob från en URL för tillgängligt källobjekt.
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)
Kopiera en blob från en källobjekt-URL asynkront
Azure Blob Storage-klientbiblioteket för Python stöder kopiering av en blob från en käll-URL asynkront. Mer information om krav för projektkonfiguration finns i Asynkron programmering.
Följ dessa steg för att kopiera en blob från en källobjekt-URL med asynkrona API:er:
Lägg till följande importinstruktioner:
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient, BlobClient
Lägg till kod för att köra programmet med .
asyncio.run
Den här funktionen kör den skickade coroutinenmain()
i vårt exempel och hanterar händelseloopenasyncio
. Coroutines deklareras med syntaxen async/await. I det här exempletmain()
skapar coroutinen först den översta nivånBlobServiceClient
med ochasync with
anropar sedan metoden som kopierar en blob från en käll-URL. Observera att endast klienten på den översta nivån behöver användaasync with
, eftersom andra klienter som skapats från den delar samma anslutningspool.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())
Lägg till kod för att kopiera en blob från en käll-URL. Följande kodexempel är detsamma som det synkrona exemplet, förutom att metoden deklareras med nyckelordet
async
och nyckelordetawait
används när metoden anropasupload_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)
Med den här grundläggande konfigurationen på plats kan du implementera andra exempel i den här artikeln som coroutines med hjälp av async/await-syntax.
Resurser
Mer information om hur du kopierar blobar med hjälp av Azure Blob Storage-klientbiblioteket för Python finns i följande resurser.
Kodexempel
REST API-åtgärder
Azure SDK för Python innehåller bibliotek som bygger på Azure REST API så att du kan interagera med REST API-åtgärder via välbekanta Python-paradigm. De klientbiblioteksmetoder som beskrivs i den här artikeln använder följande REST API-åtgärder:
- Placera blob från URL (REST API)
- Placera Blockera från URL (REST API)
Klientbiblioteksresurser
Relaterat innehåll
- Den här artikeln är en del av utvecklarguiden för Blob Storage för Python. Mer information finns i den fullständiga listan över utvecklarguideartiklar i Skapa din Python-app.