Hantera blobegenskaper och metadata med Go
Förutom de data som de innehåller stöder blobar systemegenskaper och användardefinierade metadata. Den här artikeln visar hur du hanterar systemegenskaper och användardefinierade metadata med hjälp av Azure Storage-klientmodulen för Go.
Förutsättningar
- Azure-prenumeration – skapa en kostnadsfritt
- Azure Storage-konto – skapa ett lagringskonto
- Gå 1.18+
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 fungera med containeregenskaper eller metadata. För auktorisering med Microsoft Entra-ID (rekommenderas) behöver du den inbyggda Rollen Storage Blob Data Reader eller senare för get-åtgärderna och Storage Blob Data Contributor eller senare för de angivna åtgärderna. Mer information finns i auktoriseringsvägledningen för Set Blob Properties (REST API), Get Blob Properties (REST API), Set Blob Metadata (REST API) eller Get Blob Metadata (REST API).
Om egenskaper och metadata
Systemegenskaper: Systemegenskaper finns på varje Blob Storage-resurs. Vissa av dem kan läsas eller ställas in, medan andra är skrivskyddade. Under täcket motsvarar vissa systemegenskaper vissa standard-HTTP-huvuden. Azure Storage-klientbiblioteket för Go underhåller dessa egenskaper åt dig.
Användardefinierade metadata: Användardefinierade metadata består av ett eller flera namn/värde-par som du anger för en Blob Storage-resurs. Du kan använda metadata för att lagra ytterligare värden med resursen. Metadatavärden är endast för dina egna syften och påverkar inte hur resursen beter sig.
Metadatanamn/värdepar är giltiga HTTP-huvuden och bör följa alla begränsningar som styr HTTP-huvuden. Mer information om namngivningskrav för metadata finns i Metadatanamn.
Kommentar
Blobindextaggar ger också möjlighet att lagra godtyckliga användardefinierade nyckel-/värdeattribut tillsammans med en Azure Blob Storage-resurs. Även om det liknar metadata indexeras endast blobindextaggar automatiskt och görs sökbara av den interna blobtjänsten. Metadata kan inte indexeras och frågas om du inte använder en separat tjänst, till exempel Azure Search.
Mer information om den här funktionen finns i Hantera och hitta data på Azure Blob Storage med blobindex (förhandsversion).
Ange och hämta egenskaper
Om du vill ange egenskaper för en blob anropar du följande metod från ett blobklientobjekt:
Alla egenskaper som inte uttryckligen anges rensas. Om du vill bevara befintliga egenskaper kan du först hämta blobegenskaperna och sedan använda dem för att fylla i rubrikerna som inte uppdateras.
I följande kodexempel anges systemegenskaperna BlobContentType
och BlobContentLanguage
på en blob, samtidigt som befintliga egenskaper bevaras:
func setBlobProperties(client *azblob.Client, containerName string, blobName string) {
// Reference the blob as a client object
blobClient := client.ServiceClient().NewContainerClient(containerName).NewBlobClient(blobName)
// Get the existing blob properties
resp, err := blobClient.GetProperties(context.TODO(), nil)
handleError(err)
// Set the new blob properties and include existing properties
_, err = blobClient.SetHTTPHeaders(context.TODO(), blob.HTTPHeaders{
BlobContentType: to.Ptr("text/plain"),
BlobContentLanguage: to.Ptr("en-us"),
BlobContentEncoding: resp.ContentEncoding,
BlobContentDisposition: resp.ContentDisposition,
BlobCacheControl: resp.CacheControl,
}, nil)
handleError(err)
}
Om du vill hämta egenskaper på en blob anropar du följande metod från ett blobklientobjekt:
I följande kodexempel hämtas en blobs systemegenskaper och några av värdena visas:
func getBlobProperties(client *azblob.Client, containerName string, blobName string) {
// Reference the blob as a client object
blobClient := client.ServiceClient().NewContainerClient(containerName).NewBlobClient(blobName)
// Get the blob properties
resp, err := blobClient.GetProperties(context.TODO(), nil)
handleError(err)
// Print the blob properties
fmt.Printf("Content type: %v\n", *resp.ContentType)
fmt.Printf("Content language: %v\n", *resp.ContentLanguage)
}
Ange och hämta metadata
Du kan ange metadata som ett eller flera namn/värde-par på en blob- eller containerresurs. Om du vill ange metadata skickar du en karta som innehåller namn/värde-par med hjälp av följande metod från ett blobklientobjekt:
I följande kodexempel anges metadata på en blob:
func setBlobMetadata(client *azblob.Client, containerName string, blobName string) {
// Reference the blob as a client object
blobClient := client.ServiceClient().NewContainerClient(containerName).NewBlobClient(blobName)
// Set the blob metadata
var metadata = make(map[string]*string)
metadata["key1"] = to.Ptr("value1")
metadata["key2"] = to.Ptr("value2")
_, err := blobClient.SetMetadata(context.TODO(), metadata, nil)
handleError(err)
}
Om du vill hämta metadata anropar du metoden GetProperties från ett blobklientobjekt och öppnar fältet Metadata
i svaret. Metoden GetProperties
hämtar blobegenskaper och metadata genom att anropa både åtgärden Hämta blobegenskaper och åtgärden Hämta blobmetadata .
I följande kodexempel läss metadata på en blob och varje nyckel/värde-par skrivs ut:
func getBlobMetadata(client *azblob.Client, containerName string, blobName string) {
// Reference the blob as a client object
blobClient := client.ServiceClient().NewContainerClient(containerName).NewBlobClient(blobName)
// Get the blob properties, which includes metadata
resp, err := blobClient.GetProperties(context.TODO(), nil)
handleError(err)
// Print the blob metadata
for k, v := range resp.Metadata {
fmt.Printf("%v: %v\n", k, *v)
}
}
Kommentar
Kodexemplen i den här guiden är avsedda att hjälpa dig att komma igång med Azure Blob Storage och Go. Du bör ändra felhantering och Context
värden för att uppfylla programmets behov.
Resurser
Mer information om hur du hanterar systemegenskaper och användardefinierade metadata med hjälp av Azure Blob Storage-klientmodulen 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. Klientbiblioteksmetoderna för att hantera systemegenskaper och användardefinierade metadata använder följande REST API-åtgärder:
- Ange blobegenskaper (REST API)
- Hämta blobegenskaper (REST API)
- Ange blobmetadata (REST API)
- Hämta blobmetadata (REST API)
Klientmodulresurser
Relaterat innehåll
- 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.