Kopiowanie obiektu blob z adresu URL obiektu źródłowego za pomocą języka Go
W tym artykule pokazano, jak skopiować obiekt blob z adresu URL obiektu źródłowego przy użyciu modułu klienta usługi Azure Storage dla języka Go. Obiekt blob można skopiować ze źródła na tym samym koncie magazynu, ze źródła na innym koncie magazynu lub z dowolnego dostępnego obiektu pobranego za pośrednictwem żądania HTTP GET dla danego adresu URL.
Metody biblioteki klienta opisane w tym artykule korzystają z operacji Put Blob From URL i Put Block From URL REST API . Te metody są preferowane w scenariuszach kopiowania, w których chcesz przenieść dane na konto magazynu i mieć adres URL obiektu źródłowego. W przypadku operacji kopiowania, w których chcesz zaplanować asynchroniczne, zobacz Kopiowanie obiektu blob z planowaniem asynchronicznym przy użyciu języka Go.
Wymagania wstępne
- Subskrypcja platformy Azure — utwórz jedną bezpłatnie
- Konto usługi Azure Storage — tworzenie konta magazynu
- Przejdź do wersji 1.18 lub nowszej
Konfigurowanie środowiska
Jeśli nie masz istniejącego projektu, w tej sekcji pokazano, jak skonfigurować projekt do pracy z modułem klienta usługi Azure Blob Storage dla języka Go. Kroki obejmują instalację modułu, dodawanie import
ścieżek i tworzenie autoryzowanego obiektu klienta. Aby uzyskać szczegółowe informacje, zobacz Wprowadzenie do usługi Azure Blob Storage i Go.
Instalowanie modułów
Zainstaluj moduł azblob przy użyciu następującego polecenia:
go get github.com/Azure/azure-sdk-for-go/sdk/storage/azblob
Aby uwierzytelnić się przy użyciu identyfikatora Entra firmy Microsoft (zalecane), zainstaluj azidentity
moduł przy użyciu następującego polecenia:
go get github.com/Azure/azure-sdk-for-go/sdk/azidentity
Dodawanie ścieżek importu
W pliku kodu dodaj następujące ścieżki importu:
import (
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)
Te ścieżki importu reprezentują minimum wymagane do rozpoczęcia pracy. Niektóre przykłady kodu w tym artykule mogą wymagać dodatkowych ścieżek importu. Aby uzyskać szczegółowe informacje i przykładowe użycie, zobacz Przykłady kodu.
Tworzenie obiektu klienta
Aby połączyć aplikację z usługą Blob Storage, utwórz obiekt klienta przy użyciu polecenia azblob. NewClient. W poniższym przykładzie pokazano, jak utworzyć obiekt klienta przy użyciu DefaultAzureCredential
autoryzacji:
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
}
Autoryzacja
Mechanizm autoryzacji musi mieć niezbędne uprawnienia do wykonania operacji kopiowania. Aby uzyskać autoryzację przy użyciu identyfikatora Entra firmy Microsoft (zalecane), potrzebujesz wbudowanej kontroli dostępu opartej na rolach platformy Azure współautora danych obiektów blob usługi Storage lub nowszego. Aby dowiedzieć się więcej, zobacz wskazówki dotyczące autoryzacji dotyczące umieszczania obiektu blob z adresu URL lub umieszczania bloku z adresu URL.
Informacje o kopiowaniu obiektów blob z adresu URL obiektu źródłowego
Operacja Put Blob From URL
tworzy nowy blokowy obiekt blob, w którym zawartość obiektu blob jest odczytywana z danego adresu URL. Operacja jest wykonywana synchronicznie.
Źródło może być dowolnym obiektem, który można pobrać za pośrednictwem standardowego żądania HTTP GET dla danego adresu URL. Obejmuje to blokowe obiekty blob, uzupełnialne obiekty blob, stronicowe obiekty blob, migawki obiektów blob, wersje obiektów blob lub dowolny dostępny obiekt wewnątrz platformy Azure lub poza nią.
Gdy obiekt źródłowy jest blokowym obiektem blob, zostanie skopiowana cała zatwierdzona zawartość obiektu blob. Zawartość docelowego obiektu blob jest identyczna z zawartością źródła, ale lista zatwierdzonych bloków nie jest zachowywana i nie są kopiowane niezatwierdzone bloki.
Miejsce docelowe jest zawsze blokowym obiektem blob, istniejącym blokowym obiektem blob lub nowym blokowym obiektem blob utworzonym przez operację. Zawartość istniejącego obiektu blob jest zastępowana zawartością nowego obiektu blob.
Operacja Put Blob From URL
zawsze kopiuje cały źródłowy obiekt blob. Kopiowanie zakresu bajtów lub zestawu bloków nie jest obsługiwane. Aby wykonać częściowe aktualizacje zawartości blokowego obiektu blob przy użyciu źródłowego adresu URL, użyj interfejsu API Put Block From URL wraz z Put Block List
.
Aby dowiedzieć się więcej na temat Put Blob From URL
operacji, w tym ograniczeń rozmiaru obiektu blob i zagadnień dotyczących rozliczeń, zobacz Put Blob From URL uwagi.
Kopiowanie obiektu blob z adresu URL obiektu źródłowego
Ta sekcja zawiera omówienie metod udostępnianych przez bibliotekę klienta usługi Azure Storage dla języka Go w celu wykonania operacji kopiowania z adresu URL obiektu źródłowego.
Następująca metoda opakowuje operację interfejsu API REST Put Blob From URL i tworzy nowy blokowy obiekt blob, w którym zawartość obiektu blob jest odczytywana z danego adresu URL:
Ta metoda jest preferowana w scenariuszach, w których chcesz przenieść dane na konto magazynu i mieć adres URL obiektu źródłowego.
W przypadku dużych obiektów można wybrać pracę z poszczególnymi blokami. Poniższa metoda opakowuje operację interfejsu API REST Put Block From URL . Ta metoda tworzy nowy blok do zatwierdzenia w ramach obiektu blob, w którym zawartość jest odczytywana z źródłowego adresu URL:
Kopiowanie obiektu blob ze źródła na platformie Azure
Jeśli kopiujesz obiekt blob ze źródła na platformie Azure, dostęp do źródłowego obiektu blob można autoryzować za pośrednictwem identyfikatora Entra firmy Microsoft (zalecanego), sygnatury dostępu współdzielonego (SAS) lub klucza konta.
Poniższy przykład kodu przedstawia scenariusz kopiowania źródłowego obiektu blob na platformie Azure. W tym przykładzie ustawiliśmy również warstwę dostępu dla docelowego obiektu blob na Cool
użycie struktury 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)
}
W poniższym przykładzie pokazano przykładowe użycie:
// 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)
Kopiowanie obiektu blob ze źródła spoza platformy Azure
Operację kopiowania można wykonać na dowolnym obiekcie źródłowym, który można pobrać za pośrednictwem żądania HTTP GET dla danego adresu URL, w tym obiektów dostępnych poza platformą Azure. Poniższy przykład kodu przedstawia scenariusz kopiowania obiektu blob z dostępnego adresu URL obiektu źródłowego.
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)
}
W poniższym przykładzie pokazano przykładowe użycie:
externalURL := "<source-url>"
destBlob = destClient.ServiceClient().NewContainerClient("destination-container").NewBlockBlobClient("destination-blob-2")
copyFromExternalSource(externalURL, destBlob)
Zasoby
Aby dowiedzieć się więcej na temat kopiowania obiektów blob przy użyciu biblioteki klienta usługi Azure Blob Storage dla języka Go, zobacz następujące zasoby.
Przykłady kodu
- Wyświetlanie przykładów kodu z tego artykułu (GitHub)
Operacje interfejsu API REST
Zestaw Azure SDK dla języka Go zawiera biblioteki oparte na interfejsie API REST platformy Azure, które umożliwiają interakcję z operacjami interfejsu API REST za pomocą znanych paradygmatów języka Go. Metody biblioteki klienta opisane w tym artykule korzystają z następujących operacji interfejsu API REST:
- Umieszczanie obiektu blob z adresu URL (interfejs API REST)
- Umieść blok z adresu URL (interfejs API REST)
Zasoby modułu klienta
Powiązana zawartość
- Ten artykuł jest częścią przewodnika dla deweloperów usługi Blob Storage dla języka Go. Aby dowiedzieć się więcej, zobacz pełną listę artykułów z przewodnika dla deweloperów na stronie Tworzenie aplikacji języka Go.