Bagikan melalui


Menyalin blob dari URL objek sumber dengan Python

Artikel ini memperlihatkan cara menyalin blob dari URL objek sumber menggunakan pustaka klien Azure Storage untuk Python. Anda dapat menyalin blob dari sumber dalam akun penyimpanan yang sama, dari sumber di akun penyimpanan yang berbeda, atau dari objek yang dapat diakses yang diambil melalui permintaan HTTP GET pada URL tertentu.

Metode pustaka klien yang tercakup dalam artikel ini menggunakan operasi Put Blob From URL dan Put Block From URL REST API. Metode ini lebih disukai untuk skenario penyalinan tempat Anda ingin memindahkan data ke akun penyimpanan dan memiliki URL untuk objek sumber. Untuk operasi salin tempat Anda menginginkan penjadwalan asinkron, lihat Menyalin blob dengan penjadwalan asinkron menggunakan Python.

Untuk mempelajari tentang menyalin blob menggunakan API asinkron, lihat Menyalin blob dari URL objek sumber secara asinkron.

Prasyarat

Menyiapkan lingkungan Anda

Jika Anda tidak memiliki proyek yang sudah ada, bagian ini menunjukkan kepada Anda cara menyiapkan proyek untuk bekerja dengan pustaka klien Azure Blob Storage untuk Python. Untuk detail selengkapnya, lihat Mulai menggunakan Azure Blob Storage dan Python.

Untuk bekerja dengan contoh kode dalam artikel ini, ikuti langkah-langkah ini untuk menyiapkan proyek Anda.

Memasang paket

Instal paket berikut menggunakan pip install:

pip install azure-storage-blob azure-identity

Menambahkan pernyataan impor

Tambahkan pernyataan import berikut:

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

Authorization

Mekanisme otorisasi harus memiliki izin yang diperlukan untuk melakukan operasi penyalinan. Untuk otorisasi dengan MICROSOFT Entra ID (disarankan), Anda memerlukan peran bawaan Azure RBAC Kontributor Data Blob Penyimpanan atau yang lebih tinggi. Untuk mempelajari lebih lanjut, lihat panduan otorisasi untuk Put Blob From URL (REST API) atau Put Block From URL (REST API).

Membuat objek klien

Untuk menyambungkan aplikasi ke Blob Storage, buat instans BlobServiceClient. Contoh berikut menunjukkan cara membuat objek klien menggunakan DefaultAzureCredential untuk otorisasi:

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

Anda juga dapat membuat objek klien untuk kontainer atau blob tertentu, baik secara langsung atau dari BlobServiceClient objek. Untuk mempelajari selengkapnya tentang membuat dan mengelola objek klien, lihat Membuat dan mengelola objek klien yang berinteraksi dengan sumber daya data.

Tentang menyalin blob dari URL objek sumber

Operasi ini Put Blob From URL membuat blob blok baru tempat konten blob dibaca dari URL tertentu. Operasi selesai secara sinkron.

Sumbernya dapat berupa objek apa pun yang dapat diambil melalui permintaan HTTP GET standar pada URL yang diberikan. Ini termasuk blob blok, blob penambahan, blob halaman, rekam jepret blob, versi blob, atau objek yang dapat diakses di dalam atau di luar Azure.

Ketika objek sumber adalah blob blok, semua konten blob yang diterapkan disalin. Konten blob tujuan identik dengan konten sumber, tetapi daftar blok yang diterapkan tidak dipertahankan dan blok yang tidak dikomit tidak disalin.

Tujuannya selalu berupa blob blok, blob blok yang ada, atau blob blok baru yang dibuat oleh operasi. Konten blob yang ada ditimpa dengan konten blob baru.

Put Blob From URL Operasi selalu menyalin seluruh blob sumber. Menyalin rentang byte atau set blok tidak didukung. Untuk melakukan pembaruan parsial pada konten blob blok dengan menggunakan URL sumber, gunakan PUT Block From URL API bersama dengan Put Block List.

Untuk mempelajari selengkapnya tentang Put Blob From URL operasi ini, termasuk batasan ukuran blob dan pertimbangan penagihan, lihat Menempatkan komentar Blob From URL.

Menyalin blob dari URL objek sumber

Bagian ini memberikan gambaran umum metode yang disediakan oleh pustaka klien Azure Storage untuk Python untuk melakukan operasi salin dari URL objek sumber.

Metode berikut membungkus operasi Put Blob From URL REST API, dan membuat blob blok baru di mana konten blob dibaca dari URL tertentu:

Metode ini lebih disukai untuk skenario di mana Anda ingin memindahkan data ke akun penyimpanan dan memiliki URL untuk objek sumber.

Untuk objek besar, Anda dapat memilih untuk bekerja dengan blok individual. Metode berikut membungkus operasi Put Block From URL REST API. Metode ini membuat blok baru yang akan diterapkan sebagai bagian dari blob tempat konten dibaca dari URL sumber:

Menyalin blob dari sumber dalam Azure

Jika Anda menyalin blob dari sumber dalam Azure, akses ke blob sumber dapat diotorisasi melalui ID Microsoft Entra, tanda tangan akses bersama (SAS), atau kunci akun.

Contoh berikut menunjukkan skenario untuk menyalin blob sumber dalam Azure. Metode upload_blob_from_url dapat secara opsional menerima parameter Boolean untuk menunjukkan apakah blob yang ada harus ditimpa, seperti yang ditunjukkan dalam contoh.

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)

Menyalin blob dari sumber di luar Azure

Anda dapat melakukan operasi salin pada objek sumber apa pun yang dapat diambil melalui permintaan HTTP GET pada URL tertentu, termasuk objek yang dapat diakses di luar Azure. Contoh berikut menunjukkan skenario untuk menyalin blob dari URL objek sumber yang dapat diakses.

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)

Menyalin blob dari URL objek sumber secara asinkron

Pustaka klien Azure Blob Storage untuk Python mendukung penyalinan blob dari URL sumber secara asinkron. Untuk mempelajari selengkapnya tentang persyaratan penyiapan proyek, lihat Pemrograman asinkron.

Ikuti langkah-langkah ini untuk menyalin blob dari URL objek sumber menggunakan API asinkron:

  1. Tambahkan pernyataan import berikut:

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient, BlobClient
    
  2. Tambahkan kode untuk menjalankan program menggunakan asyncio.run. Fungsi ini menjalankan coroutine yang diteruskan, main() dalam contoh kami, dan mengelola perulangan asyncio peristiwa. Koroutin dinyatakan dengan sintaks asinkron/tunggu. Dalam contoh ini, main() coroutine pertama-tama membuat tingkat BlobServiceClient atas menggunakan async with, lalu memanggil metode yang menyalin blob dari URL sumber. Perhatikan bahwa hanya klien tingkat atas yang perlu menggunakan async with, karena klien lain yang dibuat darinya berbagi kumpulan koneksi yang sama.

    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. Tambahkan kode untuk menyalin blob dari URL sumber. Contoh kode berikut sama dengan contoh sinkron, kecuali bahwa metode dinyatakan dengan async kata kunci dan await kata kunci digunakan saat memanggil upload_blob_from_url metode .

    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)
    

Dengan pengaturan dasar ini, Anda dapat menerapkan contoh lain dalam artikel ini sebagai koroutin menggunakan sintaks asinkron/tunggu.

Sumber

Untuk mempelajari selengkapnya tentang menyalin blob menggunakan pustaka klien Azure Blob Storage untuk Python, lihat sumber daya berikut ini.

Sampel kode

Operasi REST API

Azure SDK untuk Python berisi pustaka yang dibangun di atas Azure REST API, memungkinkan Anda berinteraksi dengan operasi REST API melalui paradigma Python yang sudah dikenal. Metode pustaka klien yang tercakup dalam artikel ini menggunakan operasi REST API berikut:

Sumber daya pustaka klien

  • Artikel ini adalah bagian dari panduan pengembang Blob Storage untuk Python. Untuk mempelajari lebih lanjut, lihat daftar lengkap artikel panduan pengembang di Membangun aplikasi Python Anda.