Caricare un BLOB in blocchi con Go
Questo articolo illustra come caricare un BLOB usando il modulo client di Archiviazione di Azure per Go. È possibile caricare dati in un BLOB in blocchi da un percorso di file, un flusso, un oggetto binario o una stringa di testo. È anche possibile caricare BLOB con tag indice.
Prerequisiti
- Sottoscrizione di Azure: creare un account gratuito
- Account di archiviazione di Azure: creare un account di archiviazione
- Go 1.18+
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 caricare un BLOB. Per l'autorizzazione con Microsoft Entra ID (scelta consigliata), è necessario disporre del ruolo predefinito di Controllo degli accessi in base al ruolo di Azure Collaboratore ai dati del BLOB di archiviazione o ruolo superiore. Per altre informazioni, vedere le indicazioni sulle autorizzazioni per Put Blob (API REST) e Put Block (API REST).
Caricare dati in un BLOB in blocchi
Per caricare un BLOB, chiamare uno dei metodi seguenti dall'oggetto client:
Per eseguire il caricamento, la libreria client può usare Put Blob o una serie di chiamate Put Block seguite da Put Block List
. Questo comportamento dipende dalle dimensioni totali dell'oggetto e dal modo in cui sono impostate le opzioni di trasferimento dei dati.
Caricare un BLOB in blocchi da un percorso di file locale
L'esempio seguente carica un file locale in un BLOB in blocchi:
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)
}
Caricare un BLOB in blocchi da un flusso
Nell'esempio seguente viene creata un'istanza di Reader
che viene letta da una stringa come se fosse un flusso di byte. Il flusso viene quindi caricato in un BLOB in blocchi:
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)
}
Caricare dati binari in un BLOB in blocchi
L'esempio seguente carica i dati binari in un BLOB in blocchi:
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)
}
Caricare un BLOB in blocchi con tag indice
L'esempio seguente carica un BLOB in blocchi con tag indice:
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)
}
Caricare un BLOB in blocchi con le opzioni di configurazione
È possibile definire le opzioni di configurazione della libreria client durante il caricamento di un BLOB. Queste opzioni possono essere ottimizzate per migliorare le prestazioni e l'affidabilità e ottimizzare i costi. Negli esempi di codice seguenti viene mostrato come definire le opzioni di configurazione per un'operazione di caricamento.
Specificare le opzioni di trasferimento dei dati per il caricamento
È possibile impostare le opzioni di configurazione durante il caricamento di un BLOB per ottimizzare le prestazioni. Per le operazioni di caricamento sono disponibili le opzioni di configurazione seguenti:
BlockSize
: dimensioni di ogni blocco durante il caricamento di un BLOB in blocchi. Il valore predefinito è 4 MB.Concurrency
: numero massimo di connessioni parallele da usare durante il caricamento. Il valore predefinito è 5.
Queste opzioni di configurazione sono disponibili durante il caricamento usando i metodi seguenti:
Il metodo Upload non supporta queste opzioni e carica 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 mostrato come specificare le opzioni di trasferimento dei dati usando UploadFileOptions. I valori forniti in questo esempio non sono necessariamente quelli consigliati. Per ottimizzare correttamente questi valori, è necessario considerare le esigenze specifiche dell'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)
}
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 caricare i BLOB tramite il modulo client di Archiviazione BLOB di Azure per Go, vedere le risorse seguenti.
Esempi di codice
- Vedere gli esempi di codice di questo articolo (GitHub)
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 caricare i BLOB usano le operazioni API REST seguenti:
Risorse del modulo client
- Documentazione di riferimento del modulo client
- Codice sorgente del modulo client
- Pacchetto (pkg.go.dev)
Vedi anche
- Gestire e trovare i dati BLOB di Azure con tag indice BLOB
- Usare i tag indice BLOB per gestire e trovare dati nell’archiviazione BLOB di Azure
Contenuto correlato
- 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.