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
- Azure-előfizetés – hozzon létre egyet ingyenesen
- Azure Storage-fiók – tárfiók létrehozása
- Python 3.8+
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:
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
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 azasyncio
eseményhurokot. A koroutinok az aszinkron/várakozási szintaxissal vannak deklarálva. Ebben a példában amain()
coroutine először a legfelső szintetBlobServiceClient
async with
hozza 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álniaasync 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())
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 aawait
kulcsszót a metódus meghívásakor használja aupload_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
- Szinkron vagy aszinkron kódminták megtekintése ebből a cikkből (GitHub)
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:
- Blob elhelyezése URL-címről (REST API)
- Blokk elhelyezése URL-címről (REST API)
Ügyfélkódtár erőforrásai
Kapcsolódó tartalom
- Ez a cikk a Python Blob Storage fejlesztői útmutatójának része. További információkért tekintse meg a Python-alkalmazás buildeléséhez kapcsolódó fejlesztői útmutatók teljes listáját.