Bagikan melalui


Mencantumkan blob dengan Go

Artikel ini memperlihatkan cara mencantumkan blob menggunakan modul klien Azure Storage untuk 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"
)

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 mengunggah blob. Untuk otorisasi dengan MICROSOFT Entra ID (disarankan), Anda memerlukan peran bawaan Azure RBAC Storage Blob Data Reader atau yang lebih tinggi. Untuk mempelajari lebih lanjut, lihat panduan otorisasi untuk List Blobs (REST API).

Tentang opsi daftar blob

Saat Anda mencantumkan blob dari kode, Anda dapat menentukan banyak opsi untuk mengelola bagaimana hasil dikembalikan dari Azure Storage. Anda dapat menentukan jumlah hasil yang akan dikembalikan di setiap set hasil, lalu mengambil set berikutnya. Anda dapat menentukan awalan untuk mengembalikan blob yang namanya dimulai dengan karakter atau string tersebut. Dan Anda dapat mencantumkan blob dalam struktur daftar datar, atau hierarkis. Daftar hierarki mengembalikan blob seolah-olah disusun ke dalam folder.

Untuk mencantumkan blob dalam kontainer menggunakan daftar datar, panggil metode berikut:

Untuk mencantumkan blob dalam kontainer menggunakan daftar hierarkis, panggil metode berikut dari objek klien kontainer:

Mengelola berapa banyak hasil yang dikembalikan

Secara default, operasi listingan mengembalikan hingga 5000 hasil sekaligus. Untuk mengembalikan serangkaian hasil yang lebih kecil, berikan nilai bukan nol untuk MaxResults bidang di ListBlobsFlatOptions atau ListBlobsHierarchyOptions.

Memfilter hasil dengan prefiks

Untuk memfilter daftar blob yang dikembalikan, tentukan string atau karakter untuk Prefix bidang di ListBlobsFlatOptions atau ListBlobsHierarchyOptions. String awalan dapat menyertakan satu atau lebih karakter. Azure Storage kemudian mengembalikan kontainer yang namanya dimulai dengan awalan tersebut saja.

Sertakan metadata blob atau informasi lainnya

Untuk menyertakan metadata blob dengan hasil, atur Metadata bidang ke true sebagai bagian dari ListBlobsInclude. Azure Storage menyertakan metadata dengan setiap blob yang dikembalikan, sehingga Anda tidak perlu mengambil metadata blob secara terpisah.

Lihat ListBlobsInclude untuk opsi tambahan untuk menyertakan rekam jepret, versi, tag indeks blob, dan informasi lainnya dengan hasilnya.

Daftar datar versus daftar hierarkis

Blob di Azure Storage diatur dalam paradigma datar, bukan paradigma hierarkis (seperti sistem file klasik). Namun, Anda dapat mengatur blob ke direktori virtual untuk meniru struktur folder. Direktori virtual merupakan bagian dari nama blob dan ditunjukkan oleh karakter pemisah.

Untuk mengatur blob ke dalam direktori virtual, gunakan karakter pemisah dalam nama blob. Karakter pemisah default adalah garis miring (/), tetapi Anda dapat menentukan karakter apa pun sebagai pemisah.

Jika Anda memberi nama blob Anda menggunakan pemisah, maka Anda dapat memilih untuk mencantumkan blob secara hierarkis. Untuk operasi daftar hierarkis, Azure Storage mengembalikan direktori dan blob virtual di bawah objek induk. Anda dapat memanggil operasi daftar secara rekursif untuk melintasi hierarki, mirip dengan cara Anda melintasi sistem file klasik secara terprogram.

Catatan

Rekam jepret blob tidak dapat dicantumkan dalam operasi daftar hierarkis.

Menggunakan daftar datar

Secara default, operasi daftar mengembalikan blob dalam daftar datar. Dalam daftar datar, blob tidak diatur oleh direktori virtual.

Contoh berikut mencantumkan blob dalam kontainer yang ditentukan menggunakan daftar datar. Contoh rekam jepret blob dan versi blob ini, jika ada:

func listBlobsFlat(client *azblob.Client, containerName string) {
    // List the blobs in the container
    pager := client.NewListBlobsFlatPager(containerName, &azblob.ListBlobsFlatOptions{
        Include: azblob.ListBlobsInclude{Snapshots: true, Versions: true},
    })

    fmt.Println("List blobs flat:")
    for pager.More() {
        resp, err := pager.NextPage(context.TODO())
        handleError(err)

        for _, blob := range resp.Segment.BlobItems {
            fmt.Println(*blob.Name)
        }
    }
}

Output sampel mirip dengan:

List blobs flat:
file4.txt
folderA/file1.txt
folderA/file2.txt
folderA/folderB/file3.txt

Contoh berikut mencantumkan blob dalam kontainer yang dimulai dengan awalan tertentu:

func listBlobsFlatOptions(client *azblob.Client, containerName string, prefix string) {
    // List the blobs in the container with a prefix
    pager := client.NewListBlobsFlatPager(containerName, &azblob.ListBlobsFlatOptions{
        Prefix: to.Ptr(prefix),
    })

    fmt.Println("List blobs with prefix:")
    for pager.More() {
        resp, err := pager.NextPage(context.TODO())
        handleError(err)

        for _, blob := range resp.Segment.BlobItems {
            fmt.Println(*blob.Name)
        }
    }
}

Saat meneruskan string awalan "sampel", output mirip dengan:

List blobs with prefix:
sample-blob1.txt
sample-blob2.txt
sample-blob3.txt

Catatan

Contoh output yang ditampilkan mengasumsikan bahwa Anda memiliki akun penyimpanan dengan namespace datar. Jika Anda telah mengaktifkan fitur namespace hierarkis untuk akun penyimpanan Anda, direktori tidak virtual. Sebaliknya, mereka adalah objek konkret dan independen. Akibatnya, direktori muncul dalam daftar sebagai blob panjang nol.

Untuk opsi daftar alternatif saat bekerja dengan namespace hierarkis, lihat NewListPathsPager.

Menggunakan daftar hierarkis

Saat Anda memanggil operasi daftar secara hierarkis, Azure Storage mengembalikan direktori dan blob virtual di tingkat hierarki pertama.

Untuk mencantumkan blob secara hierarkis, gunakan metode berikut:

Contoh berikut mencantumkan blob dalam kontainer yang ditentukan menggunakan daftar hierarkis. Dalam contoh ini, parameter awalan awalan diatur ke string kosong untuk mencantumkan semua blob dalam kontainer. Contoh kemudian memanggil operasi daftar secara rekursif untuk melintasi hierarki direktori virtual dan mencantumkan blob.

func listBlobsHierarchy(client *azblob.Client, containerName string, prefix string) {
    // Reference the container as a client object
    containerClient := client.ServiceClient().NewContainerClient(containerName)

    pager := containerClient.NewListBlobsHierarchyPager("/", &container.ListBlobsHierarchyOptions{
        Prefix:     to.Ptr(prefix),
        MaxResults: to.Ptr(int32(1)), // MaxResults set to 1 for demonstration purposes
    })

    for pager.More() {
        resp, err := pager.NextPage(context.TODO())
        handleError(err)

        if resp.Segment.BlobPrefixes != nil {
            for _, prefix := range resp.Segment.BlobPrefixes {
                fmt.Println("Virtual directory prefix:", *prefix.Name)

                // Recursively list blobs in the prefix
                listBlobsHierarchy(client, containerName, *prefix.Name)
            }
        }

        for _, blob := range resp.Segment.BlobItems {
            fmt.Println("Blob:", *blob.Name)
        }
    }
}

Output sampel mirip dengan:

Virtual directory prefix: folderA/
Blob: folderA/file1.txt
Blob: folderA/file2.txt
Blob: folderA/file3.txt
Virtual directory prefix: folderA/folderB/
Blob: folderA/folderB/file1.txt
Blob: folderA/folderB/file2.txt
Blob: folderA/folderB/file3.txt

Catatan

Sampel kode dalam panduan ini dimaksudkan untuk membantu Anda mulai menggunakan Azure Blob Storage dan Go. Anda harus mengubah penanganan kesalahan dan Context nilai untuk memenuhi kebutuhan aplikasi Anda.

Sumber

Untuk mempelajari selengkapnya tentang cara mencantumkan blob menggunakan modul 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 untuk mencantumkan blob menggunakan operasi REST API berikut:

Sumber daya modul klien

Lihat juga