Copiare un BLOB da un URL dell'oggetto di origine con Go

Questo articolo illustra come copiare un BLOB da un URL dell'oggetto di origine usando il modulo client di Archiviazione di Azure per Go. È possibile copiare un BLOB da un'origine all'interno dello stesso account di archiviazione, da un'origine in un account di archiviazione diverso o da qualsiasi oggetto accessibile recuperato tramite una richiesta HTTP GET in un determinato URL.

I metodi della libreria client illustrati in questo articolo usano le operazioni dell'API REST Put Blob from URL e Put Block From URL. Questi metodi sono preferiti per gli scenari di copia in cui si desidera spostare i dati in un account di archiviazione e avere un URL per l'oggetto di origine. Per le operazioni di copia in cui si vuole pianificare in modo asincrono, vedere Copiare un BLOB con pianificazione asincrona usando Go.

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 copia. 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 From URL o Put Block From URL.

Informazioni sulla copia di BLOB da un URL dell'oggetto di origine

L'operazione Put Blob From URL crea un nuovo BLOB in blocchi in cui il contenuto del BLOB viene letto da un URL specificato. L'operazione viene completata in modo sincrono.

L'origine può essere qualsiasi oggetto recuperabile tramite una richiesta HTTP GET standard nell'URL specificato. Ciò include BLOB in blocchi, BLOB di accodamento, BLOB di pagine, snapshot di BLOB, versioni di BLOB o qualsiasi oggetto accessibile all'interno o all'esterno di Azure.

Quando l'oggetto di origine è un BLOB in blocchi, tutto il contenuto dei BLOB di cui è stato eseguito il commit viene copiato. Il contenuto del BLOB di destinazione è identico al contenuto dell'origine, ma l'elenco dei blocchi di cui è stato eseguito il commit non viene mantenuto e i blocchi di cui non è stato eseguito il commit non vengono copiati.

La destinazione è sempre un BLOB in blocchi, preesistente oppure creato dall'operazione. Il contenuto di un BLOB esistente viene sovrascritto con il contenuto del nuovo BLOB.

L'operazione Put Blob From URL copia sempre l'intero BLOB di origine. La copia di un intervallo di byte o di un set di blocchi non è supportata. Per eseguire aggiornamenti parziali del contenuto di un BLOB in blocchi usando un URL di origine, usare l'API Put Block From URL insieme a Put Block List.

Per altre informazioni sull'operazione Put Blob From URL, incluse le limitazioni delle dimensioni dei BLOB e considerazioni sulla fatturazione, vedere Commenti su Put Blob from URL.

Copiare un BLOB da un URL dell'oggetto di origine

Questa sezione offre una panoramica dei metodi forniti dalla libreria client di Archiviazione di Azure per Go per eseguire un'operazione di copia da un URL dell'oggetto di origine.

Il metodo seguente esegue il wrapping dell'operazione dell’API REST Put Blob from URL e crea un nuovo BLOB in blocchi in cui il contenuto viene letto da un URL specificato:

Questo è il metodo preferibile negli scenari in cui si vogliono spostare i dati in un account di archiviazione e si ha un URL per l'oggetto di origine.

Per oggetti di grandi dimensioni, è possibile usare singoli blocchi. Il metodo seguente esegue il wrapping dell'operazione dell’API REST Put Block From URL. Questo metodo crea un nuovo blocco di cui eseguire il commit come parte di un BLOB in cui il contenuto viene letto da un URL di origine:

Copiare un BLOB da un'origine in Azure

Se si copia un BLOB da un'origine all'interno di Azure, l'accesso al BLOB di origine può essere autorizzato tramite Microsoft Entra ID (scelta consigliata), una firma di accesso condiviso o una chiave dell'account.

L'esempio di codice seguente fa riferimento a uno scenario per la copia da un BLOB di origine all'interno di Azure. In questo esempio viene inoltre impostato il livello di accesso per il BLOB di destinazione su Cool usando lo struct UploadBlobFromURLOptions.

func copyFromSourceURL(srcBlob *blockblob.Client, destBlob *blockblob.Client) {
    // Set copy options
    copyOptions := blockblob.UploadBlobFromURLOptions{
        Tier: to.Ptr(blob.AccessTierCool),
    }

    // Copy the blob from the source URL to the destination blob
    _, err := destBlob.UploadBlobFromURL(context.TODO(), srcBlob.URL(), &copyOptions)
    handleError(err)
}

L'esempio seguente mostra l'utilizzo di esempio:

// TODO: replace <storage-account-name> placeholders with actual storage account names
srcURL := "https://<src-storage-account-name>.blob.core.windows.net/"
destURL := "https://<dest-storage-account-name>.blob.core.windows.net/"

credential, err := azidentity.NewDefaultAzureCredential(nil)
handleError(err)

srcClient, err := azblob.NewClient(srcURL, credential, nil)
handleError(err)
destClient, err := azblob.NewClient(destURL, credential, nil)
handleError(err)

srcBlob := srcClient.ServiceClient().NewContainerClient("source-container").NewBlockBlobClient("source-blob")
destBlob := destClient.ServiceClient().NewContainerClient("destination-container").NewBlockBlobClient("destination-blob-1")

copyFromSourceURL(srcBlob, destBlob)

Copiare un BLOB da un'origine all'esterno di Azure

È possibile eseguire un'operazione di copia su qualsiasi oggetto di origine recuperabile tramite una richiesta HTTP GET in un determinato URL, inclusi gli oggetti accessibili all'esterno di Azure. L'esempio di codice seguente fa riferimento a uno scenario per la copia di un BLOB da un URL dell'oggetto di origine accessibile.

func copyFromExternalSource(srcURL string, destBlob *blockblob.Client) {
    // Set copy options
    copyOptions := blockblob.UploadBlobFromURLOptions{
        Tier: to.Ptr(blob.AccessTierCool),
    }

    // Copy the blob from the source URL to the destination blob
    _, err := destBlob.UploadBlobFromURL(context.TODO(), srcURL, &copyOptions)
    handleError(err)
}

L'esempio seguente mostra l'utilizzo di esempio:

externalURL := "<source-url>"

destBlob = destClient.ServiceClient().NewContainerClient("destination-container").NewBlockBlobClient("destination-blob-2")

copyFromExternalSource(externalURL, destBlob)

Risorse

Per altre informazioni sulla copia di BLOB con la libreria 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 illustrati in questo articolo usano le operazioni API REST seguenti:

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.