Megosztás a következőn keresztül:


Blob másolása forrásobjektum URL-címéről a Pythonnal

Ez a cikk bemutatja, hogyan másolhat blobokat egy forrásobjektum URL-címéről a PythonHoz készült Azure Storage-ügyfélkódtár használatával. Egy blobot másolhat egy forrásból ugyanabban a tárfiókban, egy másik tárfiókban lévő forrásból, vagy bármely akadálymentes objektumból, amely egy adott URL-címen http GET kéréssel kérhető le.

A cikkben tárgyalt ügyfélkódtár-metódusok a Blob url-címről és a Blokk letiltása URL-ből REST API-műveleteket használják. Ezek a módszerek olyan másolási forgatókönyvek esetében ajánlottak, ahol adatokat szeretne áthelyezni egy tárfiókba, és rendelkeznie kell a forrásobjektum URL-címével. Az aszinkron ütemezést használó másolási műveletekről lásd: Blob másolása aszinkron ütemezéssel a Python használatával.

A blobok aszinkron API-k használatával történő másolásáról a forrásobjektum URL-címének aszinkron másolása című témakörben olvashat.

Előfeltételek

Saját környezet beállítása

Ha nem rendelkezik meglévő projekttel, ez a szakasz bemutatja, hogyan állíthat be egy projektet a PythonHoz készült Azure Blob Storage ügyfélkódtár használatához. További részletekért tekintse meg az Azure Blob Storage és a Python használatának első lépéseit.

A jelen cikkben szereplő példakódok használatához kövesse az alábbi lépéseket a projekt beállításához.

Csomagok telepítése

Telepítse a következő csomagokat a következő használatával pip install:

pip install azure-storage-blob azure-identity

Importálási utasítások hozzáadása

Adja hozzá a következő import-utasításokat:

from azure.identity import DefaultAzureCredential
from azure.storage.blob import (
    BlobServiceClient,
    BlobClient,
)

Engedélyezés

Az engedélyezési mechanizmusnak rendelkeznie kell a másolási művelet végrehajtásához szükséges engedélyekkel. A Microsoft Entra-azonosítóval való engedélyezéshez (ajánlott) az Azure RBAC beépített szerepkörű Storage Blob Data Közreműködő vagy újabb szerepkörre van szüksége. További információkért tekintse meg a Blob url-címről (REST API) vagy a Letiltás url-címről (REST API) engedélyezési útmutatóját.

Ügyfélobjektum létrehozása

Ha egy alkalmazást a Blob Storage-hoz szeretne csatlakoztatni, hozzon létre egy BlobServiceClient-példányt. Az alábbi példa bemutatja, hogyan hozhat létre ügyfélobjektumot DefaultAzureCredential engedélyezés céljából:

# 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)

Ügyfélobjektumokat is létrehozhat adott tárolókhoz vagy blobokhoz közvetlenül vagy az BlobServiceClient objektumból. Az ügyfélobjektumok létrehozásáról és kezeléséről további információt az adaterőforrásokat kezelő ügyfélobjektumok létrehozása és kezelése című témakörben talál.

Blobok másolása forrásobjektum URL-címéről

A Put Blob From URL művelet létrehoz egy új blokkblobot, amelyben a blob tartalma egy adott URL-címről lesz beolvasva. A művelet szinkron módon fejeződik be.

A forrás bármilyen objektum lekérhető egy szabványos HTTP GET kéréssel a megadott URL-címen. Ide tartoznak a blokkblobok, a hozzáfűző blobok, a lapblobok, a blob pillanatképei, a blobverziók vagy az Azure-on belüli vagy azon kívüli akadálymentes objektumok.

Ha a forrásobjektum blokkblob, a program minden véglegesített blobtartalmat átmásol. A célblob tartalma megegyezik a forrás tartalmával, de a véglegesített blokkok listája nem marad meg, és a nem véglegesített blokkok nem lesznek másolva.

A cél mindig egy blokkblob, vagy egy meglévő blokkblob, vagy a művelet által létrehozott új blokkblob. Egy meglévő blob tartalma felülíródik az új blob tartalmával.

A Put Blob From URL művelet mindig a teljes forrásblobot másolja át. A bájtok vagy blokkok tartományának másolása nem támogatott. Ha egy blokkblob tartalmának részleges frissítését forrás URL-címmel szeretné végrehajtani, használja a Blokkblokk mentése URL-api-t és a .Put Block List

Ha többet szeretne megtudni a műveletről, beleértve a Put Blob From URL blobméret korlátozásait és a számlázási szempontokat, olvassa el a Blob elhelyezése URL-címből című megjegyzést.

Blob másolása forrásobjektum URL-címéről

Ez a szakasz áttekintést nyújt a Pythonhoz készült Azure Storage ügyfélkódtár által a másolási művelet forrásobjektum URL-címéről történő végrehajtásához.

A következő metódus körbefuttatja a Blob elhelyezése URL-címből REST API-műveletet, és létrehoz egy új blokkblobot, amelyben a blob tartalma egy adott URL-címről lesz beolvasva:

Ezek a metódusok olyan helyzetekben ajánlottak, amikor adatokat szeretne áthelyezni egy tárfiókba, és rendelkeznie kell a forrásobjektum URL-címével.

Nagy objektumok esetén dönthet úgy, hogy az egyes blokkokkal dolgozik. Az alábbi metódus körbefuttatja a Put Block From URL REST API-műveletet. Ez a metódus létrehoz egy új blokkot, amely egy blob részeként lesz véglegesítve, ahol a tartalom egy forrás URL-címről lesz beolvasva:

Blob másolása egy Azure-beli forrásból

Ha egy azure-beli forrásból másol egy blobot, a forrásblobhoz való hozzáférés a Microsoft Entra-azonosítón, a közös hozzáférésű jogosultságkódon (SAS) vagy egy fiókkulcson keresztül engedélyezhető.

Az alábbi példa egy forrásblob Azure-beli másolásának forgatókönyvét mutatja be. A upload_blob_from_url metódus opcionálisan elfogadhat egy logikai paramétert, amely jelzi, hogy egy meglévő blob felülírható-e a példában látható módon.

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)

Blob másolása az Azure-on kívüli forrásból

Másolási műveletet bármely olyan forrásobjektumon végrehajthat, amely http GET kéréssel kérhető le egy adott URL-címen, beleértve az Azure-on kívüli akadálymentes objektumokat is. Az alábbi példa egy blob akadálymentes forrásobjektum URL-címéről történő másolásának forgatókönyvét mutatja be.

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)

Blob másolása forrásobjektum URL-címéről aszinkron módon

A PythonHoz készült Azure Blob Storage-ügyfélkódtár támogatja a blobok forrás URL-címről való aszinkron másolását. A projektbeállítási követelményekről további információt az Aszinkron programozás című témakörben talál.

Kövesse az alábbi lépéseket egy blob forrásobjektum URL-címéről aszinkron API-k használatával történő másolásához:

  1. Adja hozzá a következő importálási utasításokat:

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient, BlobClient
    
  2. Kód hozzáadása a program futtatásához a következő használatával asyncio.run: . Ez a függvény a példánkban futtatja az átadott koroutint, main() és kezeli az asyncio eseményhurokot. A koroutinok az aszinkron/várakozási szintaxissal vannak deklarálva. Ebben a példában a main() coroutine először a legfelső szintet BlobServiceClient async withhozza létre, majd meghívja azt a metódust, amely egy blobot másol egy forrás URL-címről. Vegye figyelembe, hogy csak a legfelső szintű ügyfélnek kell használnia async with, mivel az abból létrehozott többi ügyfél ugyanazt a kapcsolatkészletet használja.

    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. Adjon hozzá kódot egy blob forrás URL-címéről való másolásához. Az alábbi példakód megegyezik a szinkron példával, azzal a kivétellel, hogy a metódus a kulcsszóval async van deklarálva, és a await kulcsszót a metódus meghívásakor használja a upload_blob_from_url rendszer.

    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)
    

Ezzel az alapszintű beállítással a cikkben más példákat is implementálhat coroutinesként az aszinkron/várakozási szintaxis használatával.

Források

Ha többet szeretne megtudni a blobok Pythonhoz készült Azure Blob Storage-ügyfélkódtár használatával történő másolásáról, tekintse meg az alábbi erőforrásokat.

Kódminták

REST API-műveletek

Az Azure SDK for Python olyan kódtárakat tartalmaz, amelyek az Azure REST API-ra épülnek, lehetővé téve a REST API-műveletek használatát jól ismert Python-paradigmákon keresztül. A cikkben tárgyalt ügyfélkódtár-metódusok a következő REST API-műveleteket használják:

Ügyfélkódtár erőforrásai