Share via


Een blok-blob uploaden met Go

In dit artikel wordt beschreven hoe u een blob uploadt met behulp van de Azure Storage-clientmodule voor Go. U kunt gegevens uploaden naar een blok-blob vanuit een bestandspad, een stroom, een binair object of een tekenreeks. U kunt ook blobs uploaden met indextags.

Vereisten

Uw omgeving instellen

Als u geen bestaand project hebt, ziet u in deze sectie hoe u een project instelt voor gebruik met de Azure Blob Storage-clientmodule voor Go. De stappen omvatten module-installatie, het toevoegen van import paden en het maken van een geautoriseerd clientobject. Zie Aan de slag met Azure Blob Storage en Go voor meer informatie.

Modules installeren

Installeer de azblob-module met behulp van de volgende opdracht:

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

Als u wilt verifiëren met Microsoft Entra ID (aanbevolen), installeert u de azidentity module met behulp van de volgende opdracht:

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

Importpaden toevoegen

Voeg in uw codebestand de volgende importpaden toe:

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

Deze importpaden vertegenwoordigen het minimum dat nodig is om aan de slag te gaan. Voor sommige codevoorbeelden in dit artikel zijn mogelijk extra importpaden vereist. Zie Codevoorbeelden voor specifieke details en voorbeeldgebruik.

Een clientobject maken

Als u een app wilt verbinden met Blob Storage, maakt u een clientobject met behulp van azblob. NewClient. In het volgende voorbeeld ziet u hoe u een clientobject maakt met behulp van DefaultAzureCredential autorisatie:

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
}

Autorisatie

Het autorisatiemechanisme moet over de benodigde machtigingen beschikken om een blob te kunnen uploaden. Voor autorisatie met Microsoft Entra ID (aanbevolen) hebt u ingebouwde Azure RBAC-rol Opslagblobgegevensbijdrager of hoger nodig. Zie de autorisatierichtlijnen voor Put Blob (REST API) en Put Block (REST API) voor meer informatie.

Gegevens uploaden naar een blok-blob

Als u een blob wilt uploaden, roept u een van de volgende methoden aan vanuit het clientobject:

Voor het uploaden kan de clientbibliotheek Put Blob of een reeks Put Block-aanroepen gebruiken, gevolgd door Put Block List. Dit gedrag is afhankelijk van de totale grootte van het object en hoe de opties voor gegevensoverdracht worden ingesteld.

Een blok-blob uploaden vanuit een lokaal bestandspad

In het volgende voorbeeld wordt een lokaal bestand geüpload naar een blok-blob:

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

Een blok-blob uploaden vanuit een stream

In het volgende voorbeeld wordt een Reader exemplaar gemaakt en uit een tekenreeks gelezen alsof het een stroom van bytes is. De stream wordt vervolgens geüpload naar een blok-blob:

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

Binaire gegevens uploaden naar een blok-blob

In het volgende voorbeeld worden binaire gegevens geüpload naar een blok-blob:

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

Een blok-blob uploaden met indextags

In het volgende voorbeeld wordt een blok-blob met indextags geüpload:

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

Een blok-blob uploaden met configuratieopties

U kunt configuratieopties voor clientbibliotheek definiëren bij het uploaden van een blob. Deze opties kunnen worden afgestemd om de prestaties te verbeteren, de betrouwbaarheid te verbeteren en de kosten te optimaliseren. In de volgende codevoorbeelden ziet u hoe u configuratieopties definieert voor een uploadbewerking.

Opties voor gegevensoverdracht opgeven voor uploaden

U kunt configuratieopties instellen bij het uploaden van een blob om de prestaties te optimaliseren. De volgende configuratieopties zijn beschikbaar voor uploadbewerkingen:

  • BlockSize: De grootte van elk blok bij het uploaden van een blok-blob. De standaardwaarde is 4 MB.
  • Concurrency: Het maximum aantal parallelle verbindingen dat tijdens het uploaden moet worden gebruikt. De standaardwaarde is 5.

Deze configuratieopties zijn beschikbaar bij het uploaden met behulp van de volgende methoden:

De methode Upload biedt geen ondersteuning voor deze opties en uploadt gegevens in één aanvraag.

Zie Schaaldoelen voor Blob Storage voor meer informatie over overdrachtslimieten voor Blob Storage.

In het volgende codevoorbeeld ziet u hoe u opties voor gegevensoverdracht opgeeft met behulp van UploadFileOptions. De waarden in dit voorbeeld zijn niet bedoeld als aanbeveling. Als u deze waarden goed wilt afstemmen, moet u rekening houden met de specifieke behoeften van uw app.

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

Zie Prestaties afstemmen voor uploads en downloads met Go voor meer informatie over het afstemmen van opties voor het afstemmen van gegevensoverdracht.

Notitie

De codevoorbeelden in deze handleiding zijn bedoeld om u te helpen aan de slag te gaan met Azure Blob Storage en Go. U moet foutafhandeling en Context -waarden wijzigen om te voldoen aan de behoeften van uw toepassing.

Resources

Zie de volgende resources voor meer informatie over het uploaden van blobs met behulp van de Azure Blob Storage-clientmodule voor Go.

Codevoorbeelden

  • Codevoorbeelden uit dit artikel weergeven (GitHub)

REST API-bewerkingen

De Azure SDK voor Go bevat bibliotheken die zijn gebaseerd op de Azure REST API, zodat u kunt communiceren met REST API-bewerkingen via bekende Go-paradigma's. De clientbibliotheekmethoden voor het uploaden van blobs gebruiken de volgende REST API-bewerkingen:

Resources voor clientmodules

Zie ook

  • Dit artikel maakt deel uit van de ontwikkelaarshandleiding voor Blob Storage voor Go. Zie de volledige lijst met artikelen over ontwikkelaarshandleidingen in Build your Go app voor meer informatie.