Een blob kopiëren van een bronobject-URL met Go
In dit artikel wordt beschreven hoe u een blob kopieert vanuit een url voor een bronobject met behulp van de Azure Storage-clientmodule voor Go. U kunt een blob kopiëren vanuit een bron binnen hetzelfde opslagaccount, van een bron in een ander opslagaccount of van een toegankelijk object dat via een HTTP GET-aanvraag op een bepaalde URL wordt opgehaald.
De clientbibliotheekmethoden die in dit artikel worden behandeld, maken gebruik van de Put Blob From URL en Put Block From URL REST API-bewerkingen. Deze methoden hebben de voorkeur voor kopieerscenario's waarbij u gegevens naar een opslagaccount wilt verplaatsen en een URL voor het bronobject wilt hebben. Zie Een blob kopiëren met asynchrone planning met behulp van Go voor kopieerbewerkingen waar u asynchrone planning wilt.
Vereisten
- Azure-abonnement: u kunt een gratis abonnement nemen
- Azure Storage-account: maak een opslagaccount
- Go 1.18+
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 kopieerbewerking uit te voeren. Voor autorisatie met Microsoft Entra ID (aanbevolen) hebt u ingebouwde Azure RBAC-rol Opslagblobgegevensbijdrager of hoger nodig. Zie de autorisatierichtlijnen voor Put Blob From URL of Put Block From URL voor meer informatie.
Over het kopiëren van blobs vanuit een bronobject-URL
Met de Put Blob From URL
bewerking wordt een nieuwe blok-blob gemaakt waarin de inhoud van de blob wordt gelezen uit een bepaalde URL. De bewerking wordt synchroon voltooid.
De bron kan elk object ophalen via een standaard HTTP GET-aanvraag op de opgegeven URL. Dit omvat blok-blobs, toevoeg-blobs, pagina-blobs, blob-momentopnamen, blobversies of een toegankelijk object binnen of buiten Azure.
Wanneer het bronobject een blok-blob is, wordt alle vastgelegde blob-inhoud gekopieerd. De inhoud van de doel-blob is identiek aan de inhoud van de bron, maar de lijst met vastgelegde blokken blijft niet behouden en niet-doorgevoerde blokken worden niet gekopieerd.
De bestemming is altijd een blok-blob, een bestaande blok-blob of een nieuwe blok-blob die door de bewerking is gemaakt. De inhoud van een bestaande blob wordt overschreven met de inhoud van de nieuwe blob.
Met Put Blob From URL
de bewerking wordt altijd de hele bron-blob gekopieerd. Het kopiëren van een bereik van bytes of een set blokken wordt niet ondersteund. Als u gedeeltelijke updates wilt uitvoeren voor de inhoud van een blok-blob met behulp van een bron-URL, gebruikt u de PUT Block From URL-API samen met Put Block List
.
Zie Opmerkingen bij Put Blob From URL voor meer informatie over de Put Blob From URL
bewerking, inclusief beperkingen voor blobgrootten en factureringsoverwegingen.
Een blob kopiëren vanuit een bronobject-URL
In deze sectie vindt u een overzicht van de methoden die worden geboden door de Azure Storage-clientbibliotheek voor Go om een kopieerbewerking uit te voeren op basis van een bronobject-URL.
De volgende methode verpakt de bewerking Put Blob From URL REST API en maakt een nieuwe blok-blob waarin de inhoud van de blob wordt gelezen uit een bepaalde URL:
Deze methode heeft de voorkeur voor scenario's waarin u gegevens naar een opslagaccount wilt verplaatsen en een URL voor het bronobject wilt hebben.
Voor grote objecten kunt u ervoor kiezen om met afzonderlijke blokken te werken. Met de volgende methode wordt de Put Block From URL REST API-bewerking verpakt. Met deze methode maakt u een nieuw blok dat moet worden doorgevoerd als onderdeel van een blob waarin de inhoud wordt gelezen uit een bron-URL:
Een blob kopiëren vanuit een bron in Azure
Als u een blob kopieert vanuit een bron in Azure, kan toegang tot de bron-blob worden geautoriseerd via Microsoft Entra ID (aanbevolen), een Shared Access Signature (SAS) of een accountsleutel.
In het volgende codevoorbeeld ziet u een scenario voor het kopiëren van een bron-blob in Azure. In dit voorbeeld stellen we ook de toegangslaag voor de doel-blob in op Cool
het gebruik van de 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(), ©Options)
handleError(err)
}
In het volgende voorbeeld ziet u voorbeeldgebruik:
// 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)
Een blob kopiëren van een bron buiten Azure
U kunt een kopieerbewerking uitvoeren op elk bronobject dat kan worden opgehaald via een HTTP GET-aanvraag op een bepaalde URL, inclusief toegankelijke objecten buiten Azure. In het volgende codevoorbeeld ziet u een scenario voor het kopiëren van een blob vanuit een toegankelijke bronobject-URL.
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, ©Options)
handleError(err)
}
In het volgende voorbeeld ziet u voorbeeldgebruik:
externalURL := "<source-url>"
destBlob = destClient.ServiceClient().NewContainerClient("destination-container").NewBlockBlobClient("destination-blob-2")
copyFromExternalSource(externalURL, destBlob)
Resources
Zie de volgende resources voor meer informatie over het kopiëren van blobs met behulp van de Azure Blob Storage-clientbibliotheek voor Go.
Codevoorbeelden
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 die in dit artikel worden behandeld, gebruiken de volgende REST API-bewerkingen:
- Blob uit URL plaatsen (REST API)
- Blok van URL plaatsen (REST API)
Resources voor clientmodules
Gerelateerde inhoud
- 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.