Dela via


Ladda upp en blockblob med Go

Den här artikeln visar hur du laddar upp en blob med hjälp av Azure Storage-klientmodulen för Go. Du kan ladda upp data till en blockblob från en filsökväg, en ström, ett binärt objekt eller en textsträng. Du kan också ladda upp blobar med indextaggar.

Förutsättningar

Konfigurera din miljö

Om du inte har ett befintligt projekt visar det här avsnittet hur du konfigurerar ett projekt så att det fungerar med Azure Blob Storage-klientmodulen för Go. Stegen omfattar modulinstallation, tillägg av import sökvägar och skapande av ett auktoriserat klientobjekt. Mer information finns i Komma igång med Azure Blob Storage och Go.

Installera moduler

Installera azblob-modulen med följande kommando:

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

Om du vill autentisera med Microsoft Entra-ID (rekommenderas) installerar du modulen azidentity med följande kommando:

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

Lägga till importsökvägar

Lägg till följande importsökvägar i kodfilen:

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

Vissa kodexempel i den här artikeln kan kräva ytterligare importsökvägar. Specifik information och exempelanvändning finns i Kodexempel.

Skapa ett klientobjekt

Om du vill ansluta en app till Blob Storage skapar du ett klientobjekt med azblob . NewClient. I följande exempel visas hur du skapar ett klientobjekt med hjälp av DefaultAzureCredential för auktorisering:

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
}

Auktorisering

Auktoriseringsmekanismen måste ha de behörigheter som krävs för att ladda upp en blob. För auktorisering med Microsoft Entra-ID (rekommenderas) behöver du den inbyggda rollen Storage Blob Data Contributor eller senare. Mer information finns i auktoriseringsvägledningen för Put Blob (REST API) och Put Block (REST API).

Ladda upp data till en blockblob

Om du vill ladda upp en blob anropar du någon av följande metoder från klientobjektet:

För att utföra uppladdningen kan klientbiblioteket använda antingen Put Blob eller en serie Put Block-anrop följt av Put Block List. Det här beteendet beror på objektets övergripande storlek och hur dataöverföringsalternativen anges.

Ladda upp en blockblob från en lokal filsökväg

I följande exempel laddas en lokal fil upp till en blockblob:

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

Ladda upp en blockblob från en dataström

I följande exempel skapas en Reader instans och läser från en sträng som om det vore en ström med byte. Strömmen laddas sedan upp till en blockblob:

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

Ladda upp binära data till en blockblob

I följande exempel laddas binära data upp till en blockblob:

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

Ladda upp en blockblob med indextaggar

I följande exempel laddas en blockblob upp med indextaggar:

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

Ladda upp en blockblob med konfigurationsalternativ

Du kan definiera konfigurationsalternativ för klientbibliotek när du laddar upp en blob. Dessa alternativ kan justeras för att förbättra prestanda, förbättra tillförlitligheten och optimera kostnaderna. Följande kodexempel visar hur du definierar konfigurationsalternativ för en uppladdningsåtgärd.

Ange alternativ för dataöverföring för uppladdning

Du kan ange konfigurationsalternativ när du laddar upp en blob för att optimera prestanda. Följande konfigurationsalternativ är tillgängliga för uppladdningsåtgärder:

  • BlockSize: Storleken på varje block när du laddar upp en blockblob. Standardvärdet är 1 MiB.
  • Concurrency: Det maximala antalet parallella anslutningar som ska användas under uppladdningen. Standardvärdet är 1.

Mer information om överföringsstorleksgränser för Blob Storage finns i Skala mål för Blob Storage.

I följande kodexempel visas hur du anger alternativ för dataöverföring med hjälp av UploadFileOptions. De värden som anges i det här exemplet är inte avsedda att vara en rekommendation. Om du vill justera dessa värden korrekt måste du ta hänsyn till appens specifika behov.

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

Kommentar

Kodexemplen i den här guiden är avsedda att hjälpa dig att komma igång med Azure Blob Storage och Go. Du bör ändra felhantering och Context värden för att uppfylla programmets behov.

Resurser

Mer information om hur du laddar upp blobar med hjälp av Azure Blob Storage-klientmodulen för Go finns i följande resurser.

Kodexempel

  • Visa kodexempel från den här artikeln (GitHub)

REST API-åtgärder

Azure SDK för Go innehåller bibliotek som bygger på Azure REST API så att du kan interagera med REST API-åtgärder via välbekanta Go-paradigm. Klientbiblioteksmetoderna för att ladda upp blobar använder följande REST API-åtgärder:

Klientmodulresurser

Se även