Dela via


Kopiera en blob från en källobjekt-URL med Go

Den här artikeln visar hur du kopierar en blob från en källobjekt-URL med hjälp av Azure Storage-klientmodulen för Go. Du kan kopiera en blob från en källa inom samma lagringskonto, från en källa i ett annat lagringskonto eller från alla tillgängliga objekt som hämtas via HTTP GET-begäran på en viss URL.

De klientbiblioteksmetoder som beskrivs i den här artikeln använder rest-API-åtgärderna Put Blob From URL och Put Block From URL . Dessa metoder är att föredra för kopieringsscenarier där du vill flytta data till ett lagringskonto och ha en URL för källobjektet. Information om kopieringsåtgärder där du vill ha asynkron schemaläggning finns i Kopiera en blob med asynkron schemaläggning med Go.

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 Kom 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"
)

Dessa importsökvägar representerar det minsta som krävs för att komma igång. 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 utföra en kopieringsåtgärd. 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 From URL (Placera blob från URL) eller Put Block From URL (Placera block från URL).

Om att kopiera blobar från en källobjekt-URL

Åtgärden Put Blob From URL skapar en ny blockblob där innehållet i bloben läse från en viss URL. Åtgärden slutförs synkront.

Källan kan vara valfritt objekt som kan hämtas via en HTTP GET-standardbegäran på den angivna URL:en. Detta omfattar blockblobar, tilläggsblobar, sidblobar, blobögonblicksbilder, blobversioner eller alla tillgängliga objekt i eller utanför Azure.

När källobjektet är en blockblob kopieras allt incheckat blobinnehåll. Innehållet i målbloben är identiskt med källans innehåll, men listan över incheckade block bevaras inte och ej bekräftade block kopieras inte.

Målet är alltid en blockblob, antingen en befintlig blockblob eller en ny blockblob som skapats av åtgärden. Innehållet i en befintlig blob skrivs över med innehållet i den nya bloben.

Åtgärden Put Blob From URL kopierar alltid hela källbloben. Kopiering av ett intervall med byte eller en uppsättning block stöds inte. Om du vill utföra partiella uppdateringar av en blockblobs innehåll med hjälp av en käll-URL använder du API:et Put Block From URL tillsammans med Put Block List.

Mer information om åtgärden Put Blob From URL , inklusive begränsningar för blobstorlek och faktureringsöverväganden, finns i Lägga till blob från URL-kommentarer.

Kopiera en blob från en url för källobjekt

Det här avsnittet ger en översikt över metoder som tillhandahålls av Azure Storage-klientbiblioteket för Go för att utföra en kopieringsåtgärd från en källobjekt-URL.

Följande metod omsluter rest-API-åtgärden Put Blob From URL och skapar en ny blockblob där innehållet i bloben läss från en viss URL:

Den här metoden är att föredra för scenarier där du vill flytta data till ett lagringskonto och ha en URL för källobjektet.

För stora objekt kan du välja att arbeta med enskilda block. Följande metod omsluter rest-API-åtgärden Put Block From URL . Den här metoden skapar ett nytt block som ska checkas in som en del av en blob där innehållet läse från en käll-URL:

Kopiera en blob från en källa i Azure

Om du kopierar en blob från en källa i Azure kan åtkomst till källbloben auktoriseras via Microsoft Entra-ID (rekommenderas), en signatur för delad åtkomst (SAS) eller en kontonyckel.

I följande kodexempel visas ett scenario för att kopiera en källblob i Azure. I det här exemplet anger vi också åtkomstnivån för målbloben till Cool att använda structen 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)
}

I följande exempel visas exempelanvändning:

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

Kopiera en blob från en källa utanför Azure

Du kan utföra en kopieringsåtgärd på alla källobjekt som kan hämtas via HTTP GET-begäran på en viss URL, inklusive tillgängliga objekt utanför Azure. I följande kodexempel visas ett scenario för att kopiera en blob från en URL för tillgängligt källobjekt.

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

I följande exempel visas exempelanvändning:

externalURL := "<source-url>"

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

copyFromExternalSource(externalURL, destBlob)

Resurser

Mer information om hur du kopierar blobar med hjälp av Azure Blob Storage-klientbiblioteket 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. De klientbiblioteksmetoder som beskrivs i den här artikeln använder följande REST API-åtgärder:

Klientmodulresurser

  • Den här artikeln är en del av utvecklarguiden för Blob Storage för Go. Mer information finns i den fullständiga listan över utvecklarguideartiklar i Skapa din Go-app.