Scaricare un BLOB con Go

Questo articolo illustra come scaricare un BLOB usando il modulo client di Archiviazione di Azure per Go. È possibile scaricare dati BLOB in varie destinazioni, tra cui un percorso di file locale, un flusso o una stringa di testo.

Prerequisiti

Configurazione dell'ambiente

Se non si ha un progetto esistente, questa sezione illustra come configurare un progetto per l'uso con il modulo client di Archiviazione BLOB di Azure per Go. I passaggi includono l'installazione del modulo, l'aggiunta di percorsi import e la creazione di un oggetto client autorizzato. Per informazioni dettagliate, vedere Introduzione all'archiviazione BLOB di Azure e Go.

Installare i moduli

Installare il modulo azblob usando il comando seguente:

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

Per eseguire l'autenticazione con Microsoft Entra ID (scelta consigliata), installare il modulo azidentity usando il comando seguente:

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

Aggiungere percorsi di importazione

Nel file di codice aggiungere i percorsi di importazione seguenti:

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

Questi percorsi di importazione rappresentano il minimo necessario per iniziare. Alcuni esempi di codice in questo articolo potrebbero richiedere percorsi di importazione aggiuntivi. Per informazioni dettagliate specifiche e utilizzo di esempio, vedere Esempi di codice.

Creare un oggetto client

Per connettere un'app all'archiviazione BLOB, creare un oggetto client usando azblob. NewClient. Nell'esempio seguente viene illustrato come creare un oggetto client usando DefaultAzureCredential per l'autorizzazione:

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
}

Autorizzazione

Il meccanismo di autorizzazione deve disporre delle autorizzazioni necessarie per eseguire un'operazione di download. Per l'autorizzazione con Microsoft Entra ID (scelta consigliata), è necessario disporre del ruolo predefinito Controllo degli accessi in base al ruolo di Azure Lettore dei dati del BLOB di archiviazione o ruolo superiore. Per altre informazioni, vedere le indicazioni sulle autorizzazioni per Get Blob (API REST).

Scaricare un BLOB

Per scaricare un BLOB, è possibile utilizzare uno o più dei metodi seguenti:

Scaricare in un percorso di file

L'esempio seguente scarica un BLOB in un percorso di file:

func downloadBlobToFile(client *azblob.Client, containerName string, blobName string) {
    // Create or open a local file where we can download the blob
    file, err := os.Create("path/to/sample/file")
    handleError(err)

    // Download the blob to the local file
    _, err = client.DownloadFile(context.TODO(), containerName, blobName, file, nil)
    handleError(err)
}

Scaricare in un flusso

L'esempio seguente scarica un BLOB in un flusso e legge dal flusso chiamando il metodo NewRetryReader.

func downloadBlobToStream(client *azblob.Client, containerName string, blobName string) {
    // Download the blob
    get, err := client.DownloadStream(context.TODO(), containerName, blobName, nil)
    handleError(err)

    downloadedData := bytes.Buffer{}
    retryReader := get.NewRetryReader(context.TODO(), &azblob.RetryReaderOptions{})
    _, err = downloadedData.ReadFrom(retryReader)
    handleError(err)

    err = retryReader.Close()
    handleError(err)

    // Print the contents of the blob we created
    fmt.Println("Blob contents:")
    fmt.Println(downloadedData.String())
}

Specificare le opzioni di trasferimento dei dati per il download

È possibile impostare le opzioni di configurazione durante il download di un BLOB per ottimizzare le prestazioni. Per le operazioni di download sono disponibili le opzioni di configurazione seguenti:

  • BlockSize: dimensioni di ogni blocco durante il download di un BLOB in blocchi. Il valore predefinito è 4 MB.
  • Concurrency: numero massimo di connessioni parallele da usare durante il download. Il valore predefinito è 5.

Queste opzioni sono disponibili durante il download usando i metodi seguenti:

Il metodo DownloadStream non supporta queste opzioni e scarica i dati in una singola richiesta.

Per altre informazioni sui limiti delle dimensioni di trasferimento per Archiviazione BLOB, vedere Dimensionare le destinazioni per Archiviazione BLOB.

Nell'esempio di codice seguente viene illustrato come specificare le opzioni di trasferimento dei dati usando DownloadFileOptions. I valori forniti in questo esempio non sono necessariamente quelli consigliati. Per ottimizzare correttamente questi valori, è necessario considerare le esigenze specifiche dell'app.

func downloadBlobTransferOptions(client *azblob.Client, containerName string, blobName string) {
    // Create or open a local file where we can download the blob
    file, err := os.Create("path/to/sample/file")
    handleError(err)

    // Download the blob to the local file
    _, err = client.DownloadFile(context.TODO(), containerName, blobName, file,
        &azblob.DownloadFileOptions{
            BlockSize:   int64(4 * 1024 * 1024), // 4 MiB
            Concurrency: uint16(2),
        })
    handleError(err)
}

Per altre informazioni sull'ottimizzazione delle opzioni di trasferimento dei dati, vedere Ottimizzazione delle prestazioni per caricamenti e download con Go.

Nota

Gli esempi di codice in questa guida sono utili per iniziare a usare Archiviazione BLOB di Azure e Go. È consigliabile modificare la gestione degli errori e i valori Context per soddisfare le esigenze dell'applicazione.

Risorse

Per altre informazioni su come scaricare i BLOB tramite il modulo client di Archiviazione BLOB di Azure per Go, vedere le risorse seguenti.

Esempi di codice

Operazioni dell'API REST

Azure SDK per Go contiene librerie basate sull'API REST di Azure che consentono di interagire con le operazioni dell'API REST tramite paradigmi Go noti. I metodi della libreria client per scaricare i BLOB usano l'operazione API REST seguente:

Risorse del modulo client

  • Questo articolo fa parte della Guida per sviluppatori di Archiviazione BLOB per Go. Per altre informazioni, vedere l’elenco completo degli articoli della Guida per sviluppatori inCreare la propria app Go.