Schnellstart: Hochladen, Herunterladen und Auflisten von Blobs mit GoQuickstart: Upload, download, and list blobs using Go

In diesem Schnellstart erfahren Sie, wie Sie mit der Programmiersprache „Go“ Blockblobs in einem Container in Azure Blob Storage hochladen, herunterladen und auflisten.In this quickstart, you learn how to use the Go programming language to upload, download, and list block blobs in a container in Azure Blob storage.

VoraussetzungenPrerequisites

Sie benötigen ein Azure-Abonnement, um auf Azure Storage zuzugreifen.To access Azure Storage, you'll need an Azure subscription. Wenn Sie noch kein Abonnement haben, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.If you don't already have a subscription, create a free account before you begin.

Der gesamte Zugriff auf Azure Storage erfolgt über ein Speicherkonto.All access to Azure Storage takes place through a storage account. Für diesen Schnellstart erstellen Sie über das Azure-Portal mithilfe von Azure PowerShell oder über die Azure-Befehlszeilenschnittstelle ein Speicherkonto.For this quickstart, create a storage account using the Azure portal, Azure PowerShell, or Azure CLI. Hilfe bei der Speicherkontoerstellung finden Sie unter Erstellen eines Speicherkontos.For help creating a storage account, see Create a storage account.

Stellen Sie sicher, dass die folgenden zusätzlichen Komponenten installiert sind:Make sure you have the following additional prerequisites installed:

  • Go 1.8 oder höher.Go 1.8 or above

  • Azure Storage Blob SDK für Go. Laden Sie das SDK mit dem folgenden Befehl herunter:Azure Storage Blob SDK for Go, using the following command:

    go get -u github.com/Azure/azure-storage-blob-go/azblob
    

    Hinweis

    Achten Sie darauf, dass Sie Azure in der URL großschreiben, um Probleme mit der Groß-/Kleinschreibung bei der Verwendung des SDK zu vermeiden.Make sure that you capitalize Azure in the URL to avoid case-related import problems when working with the SDK. Azure muss in den Importanweisungen ebenfalls großgeschrieben werden.Also capitalize Azure in your import statements.

Herunterladen der BeispielanwendungDownload the sample application

Die in diesem Schnellstart verwendete Beispielanwendung ist eine einfache Go-Anwendung.The sample application used in this quickstart is a basic Go application.

Verwenden Sie Git, um eine Kopie der Anwendung in Ihre Entwicklungsumgebung herunterzuladen.Use git to download a copy of the application to your development environment.

git clone https://github.com/Azure-Samples/storage-blobs-go-quickstart 

Mit diesem Befehl wird das Repository in Ihren lokalen Git-Ordner geklont.This command clones the repository to your local git folder. Zum Öffnen des Go-Beispiels für Blob Storage suchen Sie nach der Datei „storage-quickstart.go“.To open the Go sample for Blob storage, look for storage-quickstart.go file.

Kopieren Ihrer Anmeldeinformationen aus dem Azure-PortalCopy your credentials from the Azure portal

Die Beispielanwendung muss den Zugriff auf Ihr Speicherkonto autorisieren.The sample application needs to authorize access to your storage account. Stellen Sie der Anwendung die Anmeldeinformationen für Ihr Speicherkonto in Form einer Verbindungszeichenfolge bereit.Provide your storage account credentials to the application in the form of a connection string. So zeigen Sie die Anmeldeinformationen für Ihr Speicherkonto an:To view your storage account credentials:

  1. Wechseln Sie im Azure-Portal zu Ihrem Speicherkonto.In to the Azure portal go to your storage account.

  2. Wählen Sie im Abschnitt Einstellungen der Speicherkontoübersicht Zugriffsschlüssel aus, um die Zugriffsschlüssel und die Verbindungszeichenfolge Ihres Kontos anzuzeigen.In the Settings section of the storage account overview, select Access keys to display your account access keys and connection string.

  3. Notieren Sie sich den Namen Ihres Speicherkontos. Sie benötigen ihn zur Autorisierung.Note the name of your storage account, which you'll need for authorization.

  4. Suchen Sie unter key1 nach dem Wert für Schlüssel, und wählen Sie dann Kopieren aus, um den Kontoschlüssel zu kopieren.Find the Key value under key1, and select Copy to copy the account key.

    Screenshot: Kopieren Ihres Kontoschlüssels aus dem Azure-Portal

Konfigurieren der SpeicherverbindungszeichenfolgeConfigure your storage connection string

Für diese Lösung müssen der Name und der Schlüssel Ihres Speicherkontos sicher in Umgebungsvariablen gespeichert sein, die sich auf dem Computer befinden, auf dem das Beispiel ausgeführt wird.This solution requires your storage account name and key to be securely stored in environment variables local to the machine running the sample. Befolgen Sie je nach Betriebssystem die Schritte für eines der unten angegebenen Beispiele, um die Umgebungsvariablen zu erstellen.Follow one of the examples below depending on your operating System to create the environment variables.

export AZURE_STORAGE_ACCOUNT="<youraccountname>"
export AZURE_STORAGE_ACCESS_KEY="<youraccountkey>"

Ausführen des BeispielsRun the sample

Dieses Beispiel erstellt eine Testdatei im aktuellen Ordner, lädt die Testdatei in den Blobspeicher hoch, listet die Blobs im Container auf und lädt die Datei in einen Puffer herunter.This sample creates a test file in the current folder, uploads the test file to Blob storage, lists the blobs in the container, and downloads the file into a buffer.

Geben Sie zum Ausführen des Beispiels den folgenden Befehl aus:To run the sample, issue the following command:

go run storage-quickstart.go

Die folgende Ausgabe ist ein Beispiel der Ausgabe, die zurückgegeben wird, wenn die Anwendung ausgeführt wird.The following output is an example of the output returned when running the application:

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.

Wenn Sie die Taste zum Fortzusetzen drücken, löscht das Beispielprogramm den Speichercontainer und die Dateien.When you press the key to continue, the sample program deletes the storage container and the files.

Tipp

Sie können zum Anzeigen der Dateien in Blob Storage auch ein Tool, z.B. den Azure Storage-Explorer, verwenden.You can also use a tool such as the Azure Storage Explorer to view the files in Blob storage. Der Azure Storage-Explorer ist ein kostenloses plattformübergreifendes Tool, das Ihnen den Zugriff auf die Speicherkontoinformationen ermöglicht.Azure Storage Explorer is a free cross-platform tool that allows you to access your storage account information.

Grundlagen des BeispielcodesUnderstand the sample code

Als Nächstes gehen wir schrittweise durch den Beispielcode, damit Sie verstehen können, wie er funktioniert.Next, we walk through the sample code so that you can understand how it works.

Erstellen von ContainerURL- und BlobURL-ObjektenCreate ContainerURL and BlobURL objects

Zunächst müssen die Verweise auf die Objekte „ContainerURL“ und „ContainerURL“ erstellt werden, die zum Zugreifen auf und Verwalten von Blob Storage verwendet werden.The first thing to do is to create the references to the ContainerURL and BlobURL objects used to access and manage Blob storage. Diese Objekte bieten Low-Level-APIs (beispielsweise für Erstellungs-, Upload- und Downloadvorgänge) zum Ausgeben von REST-APIs.These objects offer low-level APIs such as Create, Upload, and Download to issue REST APIs.

  • Verwenden Sie die Struktur SharedKeyCredential, um Ihre Anmeldeinformationen zu speichern.Use SharedKeyCredential struct to store your credentials.

  • Erstellen Sie unter Verwendung der Anmeldeinformationen und Optionen eine Pipeline.Create a Pipeline using the credentials and options. Mit der Pipeline werden u.a. Wiederholungsrichtlinien, Protokollierung und Deserialisierung von HTTP-Antwortnutzlasten festgelegt.The pipeline specifies things like retry policies, logging, deserialization of HTTP response payloads, and more.

  • Instanziieren Sie eine neue ContainerURL und ein neues Objekt vom Typ BlobURL, um Vorgänge für Container (Erstellen) und Blobs (Hochladen und Herunterladen) auszuführen.Instantiate a new ContainerURL, and a new BlobURL object to run operations on container (Create) and blobs (Upload and Download).

Sobald das ContainerURL-Objekt vorhanden ist, können Sie das BlobURL-Objekt instanziieren, das auf einen Blob verweist, und Vorgänge wie Hochladen, Herunterladen und Kopieren ausführen.Once you have the ContainerURL, you can instantiate the BlobURL object that points to a blob, and perform operations such as upload, download, and copy.

Wichtig

Die Containernamen müssen klein geschrieben werden.Container names must be lowercase. Weitere Informationen zu Container- und Blobnamen finden Sie unter Benennen von Containern, Blobs und Metadaten und Verweisen auf diese.See Naming and Referencing Containers, Blobs, and Metadata for more information about container and blob names.

In diesem Abschnitt erstellen Sie einen neuen Container.In this section, you create a new container. Der Name des Containers lautetquickstartblobs-[zufällige Zeichenfolge] .The container is called 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)

Hochladen von Blobs in den ContainerUpload blobs to the container

Blobspeicher unterstützt Block-, Anfüge- und Seitenblobs.Blob storage supports block blobs, append blobs, and page blobs. Blockblobs werden am häufigsten und auch in diesem Schnellstart verwendet.Block blobs are the most commonly used, and that is what is used in this quickstart.

Zum Hochladen einer Datei in ein Blob öffnen Sie die Datei mit os.Open.To upload a file to a blob, open the file using os.Open. Anschließend können Sie die Datei mithilfe einer der folgenden REST-APIs an den angegebenen Pfad hochladen: Upload (PutBlob), StageBlock/CommitBlockList (PutBlock/PutBlockList).You can then upload the file to the specified path using one of the REST APIs: Upload (PutBlob), StageBlock/CommitBlockList (PutBlock/PutBlockList).

Als Alternative bietet das SDK High-Level-APIs, die auf den Low-Level-REST-APIs aufbauen.Alternatively, the SDK offers high-level APIs that are built on top of the low-level REST APIs. So verwendet beispielsweise die Funktion UploadFileToBlockBlob Vorgänge vom Typ „StageBlock“ (PutBlock), um eine Datei parallel in Blöcken hochzuladen und so den Durchsatz zu optimieren.As an example, UploadFileToBlockBlob function uses StageBlock (PutBlock) operations to concurrently upload a file in chunks to optimize the throughput. Ist die Datei kleiner als 256 MB, wird stattdessen „Upload“ (PutBlob) verwendet, um die Übertragung mit einer einzelnen Transaktion durchzuführen.If the file is less than 256 MB, it uses Upload (PutBlob) instead to complete the transfer in a single transaction.

Im folgenden Beispiel wird die Datei in einen Container mit dem Namen quickstartblobs-[zufällige Zeichenfolge] hochgeladen.The following example uploads the file to your container called 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)

Auflisten der Blobs in einem ContainerList the blobs in a container

Rufen Sie eine Liste mit Dateien im Container ab, indem Sie die ListBlobs-Methode auf ein ContainerURL-Objekt anwenden.Get a list of files in the container using the ListBlobs method on a ContainerURL. ListBlobs gibt ein einzelnes Segment von Blobs (bis zu 5000) beginnend mit dem angegebenen Marker zurück.ListBlobs returns a single segment of blobs (up to 5000) starting from the specified Marker. Verwenden Sie einen leeren Marker, um die Enumeration von vorn zu beginnen.Use an empty Marker to start enumeration from the beginning. Blobnamen werden in lexikografischer Reihenfolge zurückgegeben.Blob names are returned in lexicographic order. Nach dem Abrufen eines Segments verarbeiten Sie dieses und rufen anschließend erneut ListBlobs auf, um den zuvor zurückgegebenen Marker zu übergeben.After getting a segment, process it, and then call ListBlobs again passing the previously returned Marker.

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

Herunterladen des BlobsDownload the blob

Laden Sie Blobs herunter, indem Sie die Low-Level-Funktion Download auf ein BlobURL-Objekt anwenden.Download blobs using the Download low-level function on a BlobURL. Dadurch wird eine Struktur vom Typ DownloadResponse zurückgegeben.This will return a DownloadResponse struct. Führen Sie die Funktion Body für die Struktur aus, um zum Lesen der Daten einen Datenstrom vom Typ RetryReader zu erhalten.Run the function Body on the struct to get a RetryReader stream for reading data. Sollte beim Lesen der Daten ein Verbindungsfehler auftreten, wird durch weitere Anforderungen versucht, die Verbindung wiederherzustellen und den Lesevorgang fortzusetzen.If a connection fails while reading, it will make additional requests to re-establish a connection and continue reading. Wenn „MaxRetryRequests“ für „RetryReaderOption“ auf „0“ festgelegt ist (Standardeinstellung), wird der ursprüngliche Antworttext zurückgegeben, und es werden keine Wiederholungen durchgeführt.Specifying a RetryReaderOption's with MaxRetryRequests set to 0 (the default), returns the original response body and no retries will be performed. Alternativ können Sie die High-Level-API DownloadBlobToBuffer oder DownloadBlobToFile verwenden, um Ihren Code zu vereinfachen.Alternatively, use the high-level APIs DownloadBlobToBuffer or DownloadBlobToFile to simplify your code.

Der folgende Code lädt das Blob mithilfe der Funktion Download herunter.The following code downloads the blob using the Download function. Die Inhalte des Blobs werden in einen Puffer geschrieben und auf der Konsole angezeigt.The contents of the blob is written into a buffer and shown on the 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)

Bereinigen von RessourcenClean up resources

Wenn Sie die in diesem Schnellstart hochgeladenen Blobs nicht mehr benötigen, können Sie mit Delete-Methode den gesamten Container löschen.If you no longer need the blobs uploaded in this quickstart, you can delete the entire container using the Delete method.

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

Ressourcen für die Entwicklung von Go-Anwendungen mit BlobsResources for developing Go applications with blobs

Sehen Sie sich diese zusätzlichen Ressourcen zur Go-Entwicklung mit Blobspeicher an:See these additional resources for Go development with Blob storage:

Nächste SchritteNext steps

In diesem Schnellstart haben Sie gelernt, wie Sie mit Go Dateien zwischen einem lokalen Datenträger und Azure Blob Storage übertragen.In this quickstart, you learned how to transfer files between a local disk and Azure blob storage using Go. Weitere Informationen zum Azure Storage Blob-SDK finden Sie im Quellcode und in der API-Referenz.For more information about the Azure Storage Blob SDK, view the Source Code and API Reference.