Nahrání objektu blob bloku pomocí Go

Tento článek ukazuje, jak nahrát objekt blob pomocí klientského modulu Azure Storage pro Go. Data můžete nahrát do objektu blob bloku z cesty k souboru, datového proudu, binárního objektu nebo textového řetězce. Objekty blob můžete také nahrát se značkami indexu.

Požadavky

Nastavení prostředí

Pokud nemáte existující projekt, v této části se dozvíte, jak nastavit projekt pro práci s modulem klienta Azure Blob Storage pro Go. Kroky zahrnují instalaci modulu, přidání import cest a vytvoření autorizovaného klientského objektu. Podrobnosti najdete v tématu Začínáme se službou Azure Blob Storage a Go.

Instalace modulů

Pomocí následujícího příkazu nainstalujte modul azblob:

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

Pokud se chcete ověřit pomocí Microsoft Entra ID (doporučeno), nainstalujte azidentity modul pomocí následujícího příkazu:

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

Přidání cest importu

Do souboru kódu přidejte následující cesty importu:

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

Tyto cesty importu představují minimum potřebné k zahájení práce. Některé příklady kódu v tomto článku můžou vyžadovat další cesty importu. Konkrétní podrobnosti a ukázkové použití najdete v ukázkách kódu.

Vytvoření objektu klienta

Pokud chcete připojit aplikaci ke službě Blob Storage, vytvořte objekt klienta pomocí příkazu azblob. NewClient. Následující příklad ukazuje, jak vytvořit objekt klienta pro DefaultAzureCredential autorizaci:

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
}

Autorizace

Autorizační mechanismus musí mít potřebná oprávnění k nahrání objektu blob. K autorizaci pomocí Microsoft Entra ID (doporučeno) potřebujete předdefinovanou roli Přispěvatel dat objektů blob služby Azure RBAC nebo vyšší. Další informace najdete v pokynech k autorizaci pro Put Blob (REST API) a Put Block (REST API).

Nahrání dat do objektu blob bloku

Pokud chcete nahrát objekt blob, zavolejte některou z následujících metod z objektu klienta:

K nahrání může klientská knihovna použít put blob nebo řadu volání put block následovaných voláním Put Block List . Toto chování závisí na celkové velikosti objektu a způsobu nastavení možností přenosu dat.

Nahrání objektu blob bloku z místní cesty k souboru

Následující příklad nahraje místní soubor do objektu blob bloku:

func uploadBlobFile(client *azblob.Client, containerName string, blobName string) {
    // Open the file for reading
    file, err := os.OpenFile("path/to/sample/file", os.O_RDONLY, 0)
    handleError(err)

    defer file.Close()

    // Upload the file to the specified container with the specified blob name
    _, err = client.UploadFile(context.TODO(), containerName, blobName, file, nil)
    handleError(err)
}

Nahrání objektu blob bloku ze streamu

Následující příklad vytvoří Reader instanci a načte z řetězce, jako by šlo o datový proud bajtů. Stream se pak nahraje do objektu blob bloku:

func uploadBlobStream(client *azblob.Client, containerName string, blobName string) {
    data := "Hello, world!"
    blobContentReader := strings.NewReader(data)

    // Upload the file to the specified container with the specified blob name
    _, err := client.UploadStream(context.TODO(), containerName, blobName, blobContentReader, nil)
    handleError(err)
}

Nahrání binárních dat do objektu blob bloku

Následující příklad nahraje binární data do objektu blob bloku:

func uploadBlobBuffer(client *azblob.Client, containerName string, blobName string) {
    // Create a buffer with the content of the file to upload
    data := []byte("Hello, world!")

    // Upload the data to a block blob
    _, err := client.UploadBuffer(context.TODO(), containerName, blobName, data, nil)
    handleError(err)
}

Nahrání objektu blob bloku se značkami indexu

Následující příklad nahraje objekt blob bloku se značkami indexu:

func uploadBlobWithIndexTags(client *azblob.Client, containerName string, blobName string) {
    // Create a buffer with the content of the file to upload
    data := []byte("Hello, world!")

    // Upload the data to a block blob with index tags
    _, err := client.UploadBuffer(context.TODO(), containerName, blobName, data, &azblob.UploadBufferOptions{
        Tags: map[string]string{
            "key1": "value1",
            "key2": "value2",
        },
    })
    handleError(err)
}

Nahrání objektu blob bloku s možnostmi konfigurace

Při nahrávání objektu blob můžete definovat možnosti konfigurace klientské knihovny. Tyto možnosti je možné ladit, aby se zlepšil výkon, zlepšila spolehlivost a optimalizovala náklady. Následující příklady kódu ukazují, jak definovat možnosti konfigurace pro operaci nahrávání.

Určení možností přenosu dat pro nahrání

Možnosti konfigurace můžete nastavit při nahrávání objektu blob za účelem optimalizace výkonu. Pro operace nahrávání jsou k dispozici následující možnosti konfigurace:

  • BlockSize: Velikost každého bloku při nahrávání objektu blob bloku. Výchozí hodnota je 4 MB.
  • Concurrency: Maximální počet paralelních připojení, která se mají použít při nahrávání. Výchozí hodnota je 5.

Tyto možnosti konfigurace jsou k dispozici při nahrávání pomocí následujících metod:

Metoda Upload tyto možnosti nepodporuje a nahraje data do jednoho požadavku.

Další informace o omezení velikosti přenosu pro Blob Storage najdete v tématu Cíle škálování pro úložiště objektů blob.

Následující příklad kódu ukazuje, jak určit možnosti přenosu dat pomocí UploadFileOptions. Hodnoty uvedené v této ukázce nejsou určené jako doporučení. Pokud chcete tyto hodnoty správně vyladit, musíte zvážit konkrétní potřeby vaší aplikace.

func uploadBlobWithTransferOptions(client *azblob.Client, containerName string, blobName string) {
    // Open the file for reading
    file, err := os.OpenFile("path/to/sample/file", os.O_RDONLY, 0)
    handleError(err)

    defer file.Close()

    // Upload the data to a block blob with transfer options
    _, err = client.UploadFile(context.TODO(), containerName, blobName, file,
        &azblob.UploadFileOptions{
            BlockSize:   int64(4 * 1024 * 1024), // 4 MiB
            Concurrency: uint16(2),
        })
    handleError(err)
}

Další informace o ladění možností přenosu dat najdete v tématu Ladění výkonu pro nahrávání a stahování pomocí Go.

Poznámka:

Ukázky kódu v této příručce vám pomůžou začít se službou Azure Blob Storage a Go. Měli byste upravit zpracování chyb a Context hodnoty tak, aby vyhovovaly potřebám vaší aplikace.

Zdroje informací

Další informace o nahrávání objektů blob pomocí klientského modulu Azure Blob Storage pro Go najdete v následujících zdrojích informací.

Ukázky kódu

  • Zobrazení ukázek kódu z tohoto článku (GitHub)

Operace rozhraní REST API

Sada Azure SDK for Go obsahuje knihovny, které jsou postavené na rozhraní Azure REST API a umožňují interakci s operacemi rozhraní REST API prostřednictvím známých paradigmat Go. Metody klientské knihovny pro nahrávání objektů blob používají následující operace rozhraní REST API:

Prostředky klientského modulu

Viz také

  • Tento článek je součástí příručky pro vývojáře služby Blob Storage pro Go. Další informace najdete v úplném seznamu článků příručky pro vývojáře na webu Sestavení aplikace Go.