Quickstart: blobs downloaden, uploaden en vermelden met behulp van Go
In deze quickstart leert u hoe u de programmeertaal Go kunt gebruiken om blok-bobs te uploaden, te downloaden en weer te geven in een container in Azure Blob-opslag.
Vereisten
U hebt een Azure-abonnement nodig voor toegang tot Azure Storage. Als u nog geen abonnement hebt, maakt u een gratis account voordat u begint.
Alle toegang tot Azure Storage vindt plaats via een opslagaccount. Voor deze quickstart gaat u een opslagaccount maken met de Azure-portal, Azure PowerShell of Azure CLI. Zie voor meer informatie over het maken van een opslagaccount Een opslagaccount maken.
Zorg dat u de volgende aanvullende vereisten hebt geïnstalleerd:
Azure Storage Blob-SDK voor Go met behulp van de volgende opdracht:
go get -u github.com/Azure/azure-storage-blob-go/azblobNotitie
Zorg ervoor dat u
Azurein de URL met hoofdletters schrijft om importproblemen met betrekking tot hoofdletters/kleine letters te voorkomen bij het werken met SDK. SchrijfAzurein de importinstructies ook met hoofdletters.
De voorbeeldtoepassing downloaden
De voorbeeldtoepassing die in deze quickstart wordt gebruikt, is een Go-basistoepassing.
Gebruik git om een kopie van de toepassing naar uw ontwikkelomgeving te downloaden.
git clone https://github.com/Azure-Samples/storage-blobs-go-quickstart
Met deze opdracht wordt de opslagplaats naar uw lokale git-map gekloond. Om het Go-voorbeeld voor Blob-opslag te openen, zoekt u het bestand storage-quickstart.go op.
Kopieer uw referenties van de Azure Portal
De voorbeeldtoepassing moet de toegang tot uw opslagaccount goedkeuren. Geef de referenties voor uw opslagaccount aan de toepassing door in de vorm van een verbindingsreeks. Om uw opslagaccountreferenties te zien, doet u het volgende:
Ga in de Azure Portal naar uw opslagaccount.
Selecteer in de sectie Instellingen van het overzicht van het opslagaccount de optie Toegangssleutels om uw accounttoegangssleutels en verbindingsreeks weer te geven.
Noteer de naam van uw opslagaccount. U hebt deze nodig voor de autorisatie.
Zoek de waarde van de Sleutel onder Key1 en selecteer de knop Kopiëren om de accountsleutel te kopiëren.

De opslagverbindingsreeks configureren
Deze oplossing vereist dat uw opslagaccountnaam en -sleutel veilig zijn opgeslagen in omgevingsvariabelen die lokaal op de computer staan waarop u het voorbeeld uitvoert. Volg afhankelijk van uw besturingssysteem een van de onderstaande voorbeelden voor het maken van de omgevingsvariabelen.
export AZURE_STORAGE_ACCOUNT="<youraccountname>"
export AZURE_STORAGE_ACCESS_KEY="<youraccountkey>"
De voorbeeldtoepassing uitvoeren
Met dit voorbeeld wordt een testbestand gemaakt in de huidige map, het testbestand geüpload naar Blob-opslag, worden de blobs in the container vermeld en wordt het bestand met een nieuwe naam gedownload naar een buffer.
Geef de volgende opdracht om het voorbeeld uit te voeren:
go run storage-quickstart.go
De volgende uitvoer is een voorbeeld van de uitvoer die wordt geretourneerd wanneer de toepassing wordt uitgevoerd:
Azure Blob storage quick start sample
Creating a container named quickstart-5568059279520899415
Creating a dummy file to test the upload and download
Uploading the file with blob name: 630910657703031215
Blob name: 630910657703031215
Downloaded the blob: hello world
this is a blob
Press the enter key to delete the sample files, example container, and exit the application.
Wanneer u op een willekeurige toets drukt om door te gaan, worden de opslagcontainer en de bestanden door het voorbeeldprogramma verwijderd.
Tip
U kunt ook een hulpprogramma zoals Azure Storage Explorer gebruiken om de bestanden in de Blob-opslag te bekijken. Azure Storage Explorer is een gratis hulpprogramma voor meerdere platforms waarmee u toegang hebt tot de gegevens van uw opslagaccount.
De voorbeeldcode begrijpen
We gaan nu de voorbeeldcode bespreken, zodat u begrijpt hoe deze werkt.
ContainerURL- en BlobURL-objecten maken
Maak eerst de verwijzingen naar de ContainerURL- en BlobURL-objecten die worden gebruikt voor het openen en beheren van Blob Storage. Deze objecten bieden API's op laag niveau zoals Create, Upload en Download om REST API's uit te geven.
Gebruik de struct SharedKeyCredential voor het opslaan van uw referenties.
Maak een pijplijn met behulp van de referenties en opties. De pijplijn bevat items zoals het beleid voor nieuwe pogingen, logboekregistratie en deserialisatie van payloads voor HTTP-antwoorden.
Maak een nieuw ContainerURL- en een nieuw BlobURL-object om bewerkingen op de container (Create) en blobs (Upload en Download) uit te voeren.
Zodra u de ContainerURL hebt, kunt u het BlobURL-object maken dat verwijst naar een blob en bewerkingen uitvoeren zoals uploaden, downloaden en kopiëren.
Belangrijk
Containernamen moeten uit kleine letters bestaan. Zie Naming and referencing containers, blobs, and metadata (Containers, blobs en metagegevens een naam geven en hiernaar verwijzen) voor meer informatie over namen voor blobs en containers.
In deze sectie maakt u een nieuwe container. De container heeft de naam quickstartblobs-[random string].
// From the Azure portal, get your storage account name and key and set environment variables.
accountName, accountKey := os.Getenv("AZURE_STORAGE_ACCOUNT"), os.Getenv("AZURE_STORAGE_ACCESS_KEY")
if len(accountName) == 0 || len(accountKey) == 0 {
log.Fatal("Either the AZURE_STORAGE_ACCOUNT or AZURE_STORAGE_ACCESS_KEY environment variable is not set")
}
// Create a default request pipeline using your storage account name and account key.
credential, err := azblob.NewSharedKeyCredential(accountName, accountKey)
if err != nil {
log.Fatal("Invalid credentials with error: " + err.Error())
}
p := azblob.NewPipeline(credential, azblob.PipelineOptions{})
// Create a random string for the quick start container
containerName := fmt.Sprintf("quickstart-%s", randomString())
// From the Azure portal, get your storage account blob service URL endpoint.
URL, _ := url.Parse(
fmt.Sprintf("https://%s.blob.core.windows.net/%s", accountName, containerName))
// Create a ContainerURL object that wraps the container URL and a request
// pipeline to make requests.
containerURL := azblob.NewContainerURL(*URL, p)
// Create the container
fmt.Printf("Creating a container named %s\n", containerName)
ctx := context.Background() // This example uses a never-expiring context
_, err = containerURL.Create(ctx, azblob.Metadata{}, azblob.PublicAccessNone)
handleErrors(err)
Blobs uploaden naar de container
Blob-opslag ondersteunt blok-blobs, toevoeg-blobs en pagina-blobs. Omdat blok-blobs het meest worden gebruikt, worden ze in deze Quick Start gebruikt.
Als u een bestand wilt uploaden naar een blob, opent u het bestand met os. Open. U kunt het bestand vervolgens naar het opgegeven pad uploaden met een van de REST API's: Upload (PutBlob), StageBlock/CommitBlockList (PutBlock/PutBlockList).
De SDK biedt API's op hoog niveau die zijn gebaseerd op de REST-API's op laag niveau. De functie UploadFileToBlockBlob maakt bijvoorbeeld gebruik van StageBlock-bewerkingen (PutBlock) om gelijktijdig een bestand in segmenten te uploaden om de doorvoer te optimaliseren. Als het bestand minder dan 256 MB is, wordt in plaats daarvan Upload (PutBlob) gebruikt om de overdracht in één transactie te voltooien.
In het volgende voorbeeld wordt het bestand geüpload naar de container met de naam quickstartblobs-[randomstring].
// Create a file to test the upload and download.
fmt.Printf("Creating a dummy file to test the upload and download\n")
data := []byte("hello world this is a blob\n")
fileName := randomString()
err = ioutil.WriteFile(fileName, data, 0700)
handleErrors(err)
// Here's how to upload a blob.
blobURL := containerURL.NewBlockBlobURL(fileName)
file, err := os.Open(fileName)
handleErrors(err)
// You can use the low-level Upload (PutBlob) API to upload files. Low-level APIs are simple wrappers for the Azure Storage REST APIs.
// Note that Upload can upload up to 256MB data in one shot. Details: https://docs.microsoft.com/rest/api/storageservices/put-blob
// To upload more than 256MB, use StageBlock (PutBlock) and CommitBlockList (PutBlockList) functions.
// Following is commented out intentionally because we will instead use UploadFileToBlockBlob API to upload the blob
// _, err = blobURL.Upload(ctx, file, azblob.BlobHTTPHeaders{ContentType: "text/plain"}, azblob.Metadata{}, azblob.BlobAccessConditions{})
// handleErrors(err)
// The high-level API UploadFileToBlockBlob function uploads blocks in parallel for optimal performance, and can handle large files as well.
// This function calls StageBlock/CommitBlockList for files larger 256 MBs, and calls Upload for any file smaller
fmt.Printf("Uploading the file with blob name: %s\n", fileName)
_, err = azblob.UploadFileToBlockBlob(ctx, file, blobURL, azblob.UploadToBlockBlobOptions{
BlockSize: 4 * 1024 * 1024,
Parallelism: 16})
handleErrors(err)
De blobs in een container in een lijst weergeven
Haal een lijst met bestanden in de container op met behulp van de methode ListBlobs in een ContainerURL. ListBlobs retourneert een enkel segment met blobs (maximaal 5000) vanaf de opgegeven markering. Gebruik een lege markering om de opsomming vanaf het begin starten. Blob-namen worden in lexografische volgorde geretourneerd. Nadat u een segment hebt opgehaald, verwerkt u het en roept u vervolgens ListBlobs opnieuw aan waarmee de eerder geretourneerde markering wordt doorgegeven.
// List the container that we have created above
fmt.Println("Listing the blobs in the container:")
for marker := (azblob.Marker{}); marker.NotDone(); {
// Get a result segment starting with the blob indicated by the current Marker.
listBlob, err := containerURL.ListBlobsFlatSegment(ctx, marker, azblob.ListBlobsSegmentOptions{})
handleErrors(err)
// ListBlobs returns the start of the next segment; you MUST use this to get
// the next segment (after processing the current result segment).
marker = listBlob.NextMarker
// Process the blobs returned in this result segment (if the segment is empty, the loop body won't execute)
for _, blobInfo := range listBlob.Segment.BlobItems {
fmt.Print(" Blob name: " + blobInfo.Name + "\n")
}
}
De blob downloaden
Download blobs met de Download-functie op laag niveau in een BlobURL. Dit resulteert in een DownloadResponse-struct. Voer de functie Body uit in de struct om een RetryReader-stroom op te halen voor het lezen van gegevens. Als een verbinding mislukt tijdens het lezen, worden aanvullende aanvragen gedaan om opnieuw een verbinding tot stand te brengen en door te gaan met lezen. Wanneer een RetryReaderOption met MaxRetryRequests die is ingesteld op 0 (standaard) wordt opgegeven, wordt de oorspronkelijke hoofdtekst van de reactie geretourneerd en worden geen nieuwe pogingen uitgevoerd. U kunt ook de API's op hoog niveau DownloadBlobToBuffer of DownloadBlobToFile gebruiken om uw code te vereenvoudigen.
Met de volgende code wordt de blob gedownload met behulp van de functie Download. De inhoud van de blob wordt naar een buffer geschreven en weergegeven in de console.
// Here's how to download the blob
downloadResponse, err := blobURL.Download(ctx, 0, azblob.CountToEnd, azblob.BlobAccessConditions{}, false)
// NOTE: automatically retries are performed if the connection fails
bodyStream := downloadResponse.Body(azblob.RetryReaderOptions{MaxRetryRequests: 20})
// read the body into a buffer
downloadedData := bytes.Buffer{}
_, err = downloadedData.ReadFrom(bodyStream)
handleErrors(err)
Resources opschonen
Als u de blobs die in deze quickstart zijn geüpload niet langer nodig hebt, kunt u de volledige container verwijderen met behulp van de methode Delete.
// Cleaning up the quick start by deleting the container and the file created locally
fmt.Printf("Press enter key to delete the sample files, example container, and exit the application.\n")
bufio.NewReader(os.Stdin).ReadBytes('\n')
fmt.Printf("Cleaning up.\n")
containerURL.Delete(ctx, azblob.ContainerAccessConditions{})
file.Close()
os.Remove(fileName)
Resources voor het ontwikkelen van Go-toepassingen met blobs
Zie de volgende aanvullende bronnen voor Go-ontwikkeling met Blob-opslag:
- Bekijk en installeer de broncode voor de Go-clientbibliotheek voor Azure Storage op GitHub.
- Verken Blob-opslagvoorbeelden die zijn geschreven met de Go-clientbibliotheek.
Volgende stappen
In deze quickstart hebt u geleerd hoe u bestanden overbrengt tussen een lokale schijf en Azure Blob-opslag met behulp van Go. Raadpleeg de broncode en API-verwijzing voor meer informatie over de SDK van Azure Storage Blob.