Kopiowanie obiektu blob z adresu URL obiektu źródłowego przy użyciu języka Python
W tym artykule pokazano, jak skopiować obiekt blob z adresu URL obiektu źródłowego przy użyciu biblioteki klienta usługi Azure Storage dla języka Python. Obiekt blob można skopiować ze źródła na tym samym koncie magazynu, ze źródła na innym koncie magazynu lub z dowolnego dostępnego obiektu pobranego za pośrednictwem żądania HTTP GET dla danego adresu URL.
Metody biblioteki klienta opisane w tym artykule korzystają z operacji Put Blob From URL i Put Block From URL REST API . Te metody są preferowane w scenariuszach kopiowania, w których chcesz przenieść dane na konto magazynu i mieć adres URL obiektu źródłowego. W przypadku operacji kopiowania, w których chcesz zaplanować asynchroniczne, zobacz Kopiowanie obiektu blob z planowaniem asynchronicznym przy użyciu języka Python.
Aby dowiedzieć się więcej na temat kopiowania obiektów blob przy użyciu asynchronicznych interfejsów API, zobacz Asynchronicznie kopiowanie obiektu blob z adresu URL obiektu źródłowego.
Wymagania wstępne
- Subskrypcja platformy Azure — utwórz jedną bezpłatnie
- Konto usługi Azure Storage — tworzenie konta magazynu
- Python 3.8+
Konfigurowanie środowiska
Jeśli nie masz istniejącego projektu, w tej sekcji pokazano, jak skonfigurować projekt do pracy z biblioteką klienta usługi Azure Blob Storage dla języka Python. Aby uzyskać więcej informacji, zobacz Rozpoczynanie pracy z usługami Azure Blob Storage i Python.
Aby pracować z przykładami kodu w tym artykule, wykonaj następujące kroki, aby skonfigurować projekt.
Instalowanie pakietów
Zainstaluj następujące pakiety przy użyciu polecenia pip install
:
pip install azure-storage-blob azure-identity
Dodawanie instrukcji importu
Dodaj następujące instrukcje import
:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import (
BlobServiceClient,
BlobClient,
)
Autoryzacja
Mechanizm autoryzacji musi mieć niezbędne uprawnienia do wykonania operacji kopiowania. Aby uzyskać autoryzację przy użyciu identyfikatora Entra firmy Microsoft (zalecane), potrzebujesz wbudowanej kontroli dostępu opartej na rolach platformy Azure współautora danych obiektów blob usługi Storage lub nowszego. Aby dowiedzieć się więcej, zobacz wskazówki dotyczące autoryzacji dotyczące umieszczania obiektów blob z adresu URL (interfejsu API REST) lub Put Block From URL (interfejs API REST).
Tworzenie obiektu klienta
Aby połączyć aplikację z usługą Blob Storage, utwórz wystąpienie klasy BlobServiceClient. W poniższym przykładzie pokazano, jak utworzyć obiekt klienta przy użyciu DefaultAzureCredential
autoryzacji:
# 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)
Można również tworzyć obiekty klienta dla określonych kontenerów lub obiektów blob bezpośrednio lub z BlobServiceClient
obiektu. Aby dowiedzieć się więcej na temat tworzenia obiektów klienta i zarządzania nimi, zobacz Tworzenie obiektów klienta korzystających z zasobów danych i zarządzanie nimi.
Informacje o kopiowaniu obiektów blob z adresu URL obiektu źródłowego
Operacja Put Blob From URL
tworzy nowy blokowy obiekt blob, w którym zawartość obiektu blob jest odczytywana z danego adresu URL. Operacja jest wykonywana synchronicznie.
Źródło może być dowolnym obiektem, który można pobrać za pośrednictwem standardowego żądania HTTP GET dla danego adresu URL. Obejmuje to blokowe obiekty blob, uzupełnialne obiekty blob, stronicowe obiekty blob, migawki obiektów blob, wersje obiektów blob lub dowolny dostępny obiekt wewnątrz platformy Azure lub poza nią.
Gdy obiekt źródłowy jest blokowym obiektem blob, zostanie skopiowana cała zatwierdzona zawartość obiektu blob. Zawartość docelowego obiektu blob jest identyczna z zawartością źródła, ale lista zatwierdzonych bloków nie jest zachowywana i nie są kopiowane niezatwierdzone bloki.
Miejsce docelowe jest zawsze blokowym obiektem blob, istniejącym blokowym obiektem blob lub nowym blokowym obiektem blob utworzonym przez operację. Zawartość istniejącego obiektu blob jest zastępowana zawartością nowego obiektu blob.
Operacja Put Blob From URL
zawsze kopiuje cały źródłowy obiekt blob. Kopiowanie zakresu bajtów lub zestawu bloków nie jest obsługiwane. Aby wykonać częściowe aktualizacje zawartości blokowego obiektu blob przy użyciu źródłowego adresu URL, użyj interfejsu API Put Block From URL wraz z Put Block List
.
Aby dowiedzieć się więcej na temat Put Blob From URL
operacji, w tym ograniczeń rozmiaru obiektu blob i zagadnień dotyczących rozliczeń, zobacz Put Blob From URL uwagi.
Kopiowanie obiektu blob z adresu URL obiektu źródłowego
Ta sekcja zawiera omówienie metod udostępnianych przez bibliotekę klienta usługi Azure Storage dla języka Python w celu wykonania operacji kopiowania z adresu URL obiektu źródłowego.
Następująca metoda opakowuje operację interfejsu API REST Put Blob From URL i tworzy nowy blokowy obiekt blob, w którym zawartość obiektu blob jest odczytywana z danego adresu URL:
Te metody są preferowane w scenariuszach, w których chcesz przenieść dane na konto magazynu i mieć adres URL obiektu źródłowego.
W przypadku dużych obiektów można wybrać pracę z poszczególnymi blokami. Poniższa metoda opakowuje operację interfejsu API REST Put Block From URL . Ta metoda tworzy nowy blok do zatwierdzenia w ramach obiektu blob, w którym zawartość jest odczytywana z źródłowego adresu URL:
Kopiowanie obiektu blob ze źródła na platformie Azure
Jeśli kopiujesz obiekt blob ze źródła na platformie Azure, dostęp do źródłowego obiektu blob można autoryzować za pośrednictwem identyfikatora Microsoft Entra ID, sygnatury dostępu współdzielonego (SAS) lub klucza konta.
Poniższy przykład przedstawia scenariusz kopiowania źródłowego obiektu blob na platformie Azure. Metoda upload_blob_from_url może opcjonalnie zaakceptować parametr logiczny, aby wskazać, czy istniejący obiekt blob powinien zostać zastąpiony, jak pokazano w przykładzie.
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)
Kopiowanie obiektu blob ze źródła spoza platformy Azure
Operację kopiowania można wykonać na dowolnym obiekcie źródłowym, który można pobrać za pośrednictwem żądania HTTP GET dla danego adresu URL, w tym obiektów dostępnych poza platformą Azure. Poniższy przykład przedstawia scenariusz kopiowania obiektu blob z dostępnego adresu URL obiektu źródłowego.
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)
Kopiowanie obiektu blob z asynchronicznego adresu URL obiektu źródłowego
Biblioteka klienta usługi Azure Blob Storage dla języka Python obsługuje asynchronicznie kopiowanie obiektu blob ze źródłowego adresu URL. Aby dowiedzieć się więcej na temat wymagań dotyczących konfiguracji projektu, zobacz Programowanie asynchroniczne.
Wykonaj następujące kroki, aby skopiować obiekt blob z adresu URL obiektu źródłowego przy użyciu asynchronicznych interfejsów API:
Dodaj następujące instrukcje importowania:
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient, BlobClient
Dodaj kod, aby uruchomić program przy użyciu polecenia
asyncio.run
. Ta funkcja uruchamia przekazaną kohroutynę wmain()
naszym przykładzie i zarządza pętląasyncio
zdarzeń. Coroutines są deklarowane za pomocą składni async/await. W tym przykładziemain()
coroutine najpierw tworzy najwyższy poziomBlobServiceClient
przy użyciu metodyasync with
, a następnie wywołuje metodę, która kopiuje obiekt blob ze źródłowego adresu URL. Należy pamiętać, że tylko klient najwyższego poziomu musi używać programuasync with
, ponieważ inni klienci utworzoni na jego podstawie współużytkować tę samą pulę połączeń.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())
Dodaj kod, aby skopiować obiekt blob ze źródłowego adresu URL. Poniższy przykład kodu jest taki sam jak w przykładzie synchronicznym, z tą różnicą, że metoda jest zadeklarowana za pomocą
async
słowa kluczowego, aawait
słowo kluczowe jest używane podczas wywoływaniaupload_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)
Ta podstawowa konfiguracja umożliwia zaimplementowanie innych przykładów w tym artykule jako kohroutines przy użyciu składni async/await.
Zasoby
Aby dowiedzieć się więcej na temat kopiowania obiektów blob przy użyciu biblioteki klienta usługi Azure Blob Storage dla języka Python, zobacz następujące zasoby.
Przykłady kodu
- Wyświetlanie synchronicznych lub asynchronicznych przykładów kodu z tego artykułu (GitHub)
Operacje interfejsu API REST
Zestaw Azure SDK dla języka Python zawiera biblioteki, które bazują na interfejsie API REST platformy Azure, umożliwiając interakcję z operacjami interfejsu API REST za pomocą znanych paradygmatów języka Python. Metody biblioteki klienta opisane w tym artykule korzystają z następujących operacji interfejsu API REST:
- Umieszczanie obiektu blob z adresu URL (interfejs API REST)
- Umieść blok z adresu URL (interfejs API REST)
Zasoby biblioteki klienta
Powiązana zawartość
- Ten artykuł jest częścią przewodnika dla deweloperów usługi Blob Storage dla języka Python. Aby dowiedzieć się więcej, zobacz pełną listę artykułów z przewodnika dla deweloperów w temacie Tworzenie aplikacji w języku Python.