Kopieren eines Blobs über eine Quellobjekt-URL mit Go
In diesem Artikel wird gezeigt, wie Sie ein Blob über eine Quellobjekt-URL mithilfe des Azure Storage-Clientmoduls für Go kopieren. Sie können ein Blob aus einer Quelle innerhalb desselben Speicherkontos, aus einer Quelle in einem anderen Speicherkonto oder aus einem beliebigen zugänglichen Objekt kopieren, das über eine HTTP GET-Anforderung für eine bestimmte URL abgerufen wird.
Die in diesem Artikel behandelten Clientbibliotheksmethoden verwenden die REST-API-Vorgänge Put Blob From URL und Put Block From URL. Diese Methoden werden für Kopierszenarien bevorzugt, in denen Sie Daten in ein Speicherkonto verschieben möchten und über eine URL für das Quellobjekt verfügen. Informationen zu Kopiervorgängen mit asynchroner Planung finden Sie unter Kopieren eines Blobs mit asynchroner Planung mithilfe von Go.
Voraussetzungen
- Azure-Abonnement – Erstellen eines kostenlosen Kontos
- Azure Storage-Konto – Erstellen eines Speicherkontos
- Go 1.18+
Erstellen Ihrer Umgebung
Wenn Sie nicht über ein vorhandenes Projekt verfügen, wird in diesem Abschnitt gezeigt, wie Sie ein Projekt für die Arbeit mit dem Azure Blob Storage-Clientmodul für Go einrichten. Die Schritte umfassen die Modulinstallation, das Hinzufügen von import
-Pfaden und das Erstellen eines autorisierten Clientobjekts. Ausführlichere Informationen finden Sie unter Erste Schritte mit Azure Blob Storage und Go.
Installieren von Modulen
Verwenden Sie den folgenden Befehl, um das Modul azblob zu installieren:
go get github.com/Azure/azure-sdk-for-go/sdk/storage/azblob
Um sich mit Microsoft Entra ID zu authentifizieren (empfohlen), installieren Sie das azidentity
-Modul mit dem folgenden Befehl:
go get github.com/Azure/azure-sdk-for-go/sdk/azidentity
Hinzufügen von Importpfaden
Fügen Sie in der Codedatei die folgenden Importpfade hinzu:
import (
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)
Dies sind die Importpfade, die mindestens für die ersten Schritte erforderlich sind. Einige Codebeispiele in diesem Artikel erfordern möglicherweise zusätzliche Importpfade. Spezifische Details und eine Beispielverwendung finden Sie unter Codebeispiele.
Erstellen eines Clientobjekts
Um eine App mit Blob Storage zu verbinden, erstellen Sie ein Clientobjekt mithilfe von azblob.NewClient. Das folgende Beispiel zeigt, wie Sie ein Clientobjekt mithilfe von DefaultAzureCredential
für die Autorisierung erstellen:
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
}
Autorisierung
Der Autorisierungsmechanismus muss über die erforderlichen Berechtigungen zum Ausführen eines Kopiervorgangs verfügen. Für die Autorisierung mit Microsoft Entra ID (empfohlen) benötigen Sie mindestens die integrierte Azure RBAC-Rolle Mitwirkender an Storage-Blobdaten. Weitere Informationen finden Sie in den Autorisierungsanleitungen für Put Blob From URL oder Put Block From URL.
Informationen zum Kopieren von Blobs über eine Quellobjekt-URL
Der Vorgang Put Blob From URL
erstellt ein neues Blockblob, in dem der Inhalt des Blobs über eine bestimmte URL gelesen wird. Der Vorgang wird synchron ausgeführt.
Die Quelle kann ein beliebiges Objekt sein, das über eine HTTP GET-Standardanforderung für die angegebene URL abgerufen werden kann. Dies umfasst Blockblobs, Anfügeblobs, Seitenblobs, Blobmomentaufnahmen, Blobversionen und alle zugänglichen Objekte innerhalb oder außerhalb von Azure.
Wenn es sich bei dem Quellobjekt um ein Blockblob handelt, wird der gesamte committete Blobinhalt kopiert. Der Inhalt des Zielblobs ist identisch mit dem Inhalt der Quelle, aber die Liste committeter Blöcke wird nicht beibehalten, und nicht committete Blöcke werden nicht kopiert.
Das Ziel ist immer ein Blockblob, entweder ein vorhandenes Blockblob oder ein neues Blockblob, das durch den Vorgang erstellt wurde. Der Inhalt eines vorhandenen Blobs wird mit dem Inhalt des neuen Blobs überschrieben.
Der Vorgang Put Blob From URL
kopiert immer das gesamte Quellblob. Das Kopieren eines Bytebereichs oder einer Gruppe von Blöcken wird nicht unterstützt. Um Teilaktualisierungen des Inhalts eines Blockblobs mithilfe einer Quell-URL vorzunehmen, verwenden Sie die API Put Block From URL zusammen mit Put Block List
.
Weitere Informationen zum Vorgang Put Blob From URL
, einschließlich Blobgrößenbeschränkungen und Abrechnungsüberlegungen, finden Sie unter Hinweise.
Kopieren eines Blobs über eine Quellobjekt-URL
Dieser Abschnitt enthält eine Übersicht über die Methoden, die von der Azure Storage-Clientbibliothek für Go bereitgestellt werden, um einen Kopiervorgang über eine Quellobjekt-URL auszuführen.
Die folgende Methode umschließt den REST-API-Vorgang Put Blob From URL, und sie erstellt ein neues Blockblob, in dem der Inhalt des Blobs über eine bestimmte URL gelesen wird:
Diese Methode wird bei Szenarien bevorzugt, in denen Sie Daten in ein Speicherkonto verschieben möchten und eine URL für das Quellobjekt haben.
Bei großen Objekten können Sie möglicherweise mit einzelnen Blöcken arbeiten. Die folgende Methode umschließt den REST-API-Vorgang Put Block From URL. Mit dieser Methode wird ein neuer Block erstellt, der als Teil eines Blobs committet werden soll, in dem der Inhalt über eine Quell-URL gelesen wird:
Kopieren eines Blobs aus einer Quelle in Azure
Wenn Sie ein Blob aus einer Quelle in Azure kopieren, kann der Zugriff auf das Quellblob über Microsoft Entra ID (empfohlen), eine SAS (Shared Access Signature) oder einen Kontoschlüssel autorisiert werden.
Im folgenden Codebeispiel wird ein Szenario zum Kopieren eines Quellblobs innerhalb von Azure gezeigt. Außerdem legen wir in diesem Beispiel die Zugriffsebene für das Ziel-Blob mithilfe der Struktur UploadBlobFromURLOptions auf Cool
fest.
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)
}
Das folgende Beispiel zeigt die Beispielsyntax:
// 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)
Kopieren eines Blobs aus einer Quelle außerhalb von Azure
Sie können einen Kopiervorgang für jedes Quellobjekt ausführen, das über eine HTTP GET-Anforderung für eine bestimmte URL abgerufen werden kann, einschließlich zugänglicher Objekte außerhalb von Azure. Im folgenden Codebeispiel wird ein Szenario zum Kopieren eines Blobs über eine URL für zugängliche Quellobjekte gezeigt.
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)
}
Das folgende Beispiel zeigt die Beispielsyntax:
externalURL := "<source-url>"
destBlob = destClient.ServiceClient().NewContainerClient("destination-container").NewBlockBlobClient("destination-blob-2")
copyFromExternalSource(externalURL, destBlob)
Ressourcen
Weitere Informationen zum Kopieren von Blobs mithilfe der Azure Blob Storage-Clientbibliothek für Go finden Sie in den folgenden Ressourcen.
Codebeispiele
- Anzeigen von Codebeispielen aus diesem Artikel (GitHub)
REST-API-Vorgänge
Das Azure SDK für Go enthält Bibliotheken, die auf der Azure-REST-API basieren, und ermöglicht Ihnen dadurch die Interaktion mit REST-API-Vorgängen über vertraute Go-Paradigmen. Die Clientbibliotheksmethoden, die in diesem Artikel behandelt werden, verwenden die folgenden REST-API-Vorgänge:
- Put Blob From URL (REST-API)
- Put Block From URL (REST-API)
Clientmodulressourcen
Zugehöriger Inhalt
- Dieser Artikel ist Teil des Blob Storage-Entwicklerleitfadens für Go. Weitere Informationen finden Sie in der vollständigen Liste der Entwicklerleitfadenartikel unter Erstellen Ihrer Go-App.