Bagikan melalui


Menyalin blob dari URL objek sumber dengan Go

Artikel ini memperlihatkan cara menyalin blob dari URL objek sumber menggunakan modul klien Azure Storage untuk Go. 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 Go.

Prasyarat

Menyiapkan lingkungan Anda

Jika Anda tidak memiliki proyek yang sudah ada, bagian ini memperlihatkan cara menyiapkan proyek untuk bekerja dengan modul klien Azure Blob Storage untuk Go. Langkah-langkahnya termasuk penginstalan modul, menambahkan import jalur, dan membuat objek klien resmi. Untuk detailnya, lihat Mulai menggunakan Azure Blob Storage dan Go.

Menginstal modul

Instal modul azblob menggunakan perintah berikut:

go get github.com/Azure/azure-sdk-for-go/sdk/storage/azblob

Untuk mengautentikasi dengan MICROSOFT Entra ID (disarankan), instal azidentity modul menggunakan perintah berikut:

go get github.com/Azure/azure-sdk-for-go/sdk/azidentity

Menambahkan jalur impor

Dalam file kode Anda, tambahkan jalur impor berikut:

import (
    "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
	"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)

Jalur impor ini mewakili minimum yang diperlukan untuk memulai. Beberapa contoh kode dalam artikel ini mungkin memerlukan jalur impor tambahan. Untuk detail tertentu dan contoh penggunaan, lihat Sampel kode.

Membuat objek klien

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

func getServiceClientTokenCredential(accountURL string) *azblob.Client {
    // Create a new service client with token credential
    credential, err := azidentity.NewDefaultAzureCredential(nil)
    handleError(err)

    client, err := azblob.NewClient(accountURL, credential, nil)
    handleError(err)

    return client
}

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 atau Put Block From URL.

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 Go 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 (disarankan), tanda tangan akses bersama (SAS), atau kunci akun.

Contoh kode berikut menunjukkan skenario untuk menyalin blob sumber dalam Azure. Dalam contoh ini, kami juga mengatur tingkat akses untuk blob tujuan untuk Cool menggunakan struct UploadBlobFromURLOptions .

func copyFromSourceURL(srcBlob *blockblob.Client, destBlob *blockblob.Client) {
    // Set copy options
    copyOptions := blockblob.UploadBlobFromURLOptions{
        Tier: to.Ptr(blob.AccessTierCool),
    }

    // Copy the blob from the source URL to the destination blob
    _, err := destBlob.UploadBlobFromURL(context.TODO(), srcBlob.URL(), &copyOptions)
    handleError(err)
}

Contoh berikut menunjukkan penggunaan sampel:

// TODO: replace <storage-account-name> placeholders with actual storage account names
srcURL := "https://<src-storage-account-name>.blob.core.windows.net/"
destURL := "https://<dest-storage-account-name>.blob.core.windows.net/"

credential, err := azidentity.NewDefaultAzureCredential(nil)
handleError(err)

srcClient, err := azblob.NewClient(srcURL, credential, nil)
handleError(err)
destClient, err := azblob.NewClient(destURL, credential, nil)
handleError(err)

srcBlob := srcClient.ServiceClient().NewContainerClient("source-container").NewBlockBlobClient("source-blob")
destBlob := destClient.ServiceClient().NewContainerClient("destination-container").NewBlockBlobClient("destination-blob-1")

copyFromSourceURL(srcBlob, destBlob)

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 kode berikut menunjukkan skenario untuk menyalin blob dari URL objek sumber yang dapat diakses.

func copyFromExternalSource(srcURL string, destBlob *blockblob.Client) {
    // Set copy options
    copyOptions := blockblob.UploadBlobFromURLOptions{
        Tier: to.Ptr(blob.AccessTierCool),
    }

    // Copy the blob from the source URL to the destination blob
    _, err := destBlob.UploadBlobFromURL(context.TODO(), srcURL, &copyOptions)
    handleError(err)
}

Contoh berikut menunjukkan penggunaan sampel:

externalURL := "<source-url>"

destBlob = destClient.ServiceClient().NewContainerClient("destination-container").NewBlockBlobClient("destination-blob-2")

copyFromExternalSource(externalURL, destBlob)

Sumber

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

Sampel kode

  • Menampilkan sampel kode dari artikel ini (GitHub)

Operasi REST API

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

Sumber daya modul klien

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