Schnellstart: Hochladen, Herunterladen und Auflisten von Blobs mit dem Java Storage SDK v10Quickstart: Upload, download, and list blobs by using the Java Storage SDK V10

In dieser Schnellstartanleitung erfahren Sie, wie Sie mit dem Java Storage-SDK Blockblobs in einem Container in Azure Blob Storage hochladen, herunterladen und auflisten.In this quickstart, you learn how to use the new Java Storage SDK to upload, download, and list block blobs in a container in Azure Blob storage. Beim neuen Java-SDK wird das reaktive Programmierungsmodell mit RxJava zur Bereitstellung von asynchronen Vorgängen verwendet.The new Java SDK uses the reactive programming model with RxJava, which provides asynchronous operations. Lesen Sie mehr über die reaktiven Erweiterungen für den virtuellen Java-Computer von RxJava.Learn more about RxJava reactive extensions for the Java VM.

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, then 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 zur Erstellung des Kontos finden Sie unter Erstellen eines Speicherkontos.For help creating the 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:

  • Maven für die Verwendung über die Befehlszeile oder eine beliebige integrierte Entwicklungsumgebung für JavaMaven to work from the command line, or any Java integrated development environment that you prefer.
  • JDKJDK

Herunterladen der BeispielanwendungDownload the sample application

Die in diesem Schnellstart verwendete Beispielanwendung ist eine einfache Konsolenanwendung.The sample application used in this quickstart is a basic console 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-java-v10-quickstart.git

Mit diesem Befehl wird das Repository in Ihren lokalen Git-Ordner geklont.This command clones the repository to your local git folder.

Nachdem der Import durch das Projekt abgeschlossen ist, öffnen Sie Quickstart.java (im Verzeichnis src/main/java/quickstart).After the project finishes importing, open Quickstart.java, located in src/main/java/quickstart.

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. Navigieren Sie zum Azure-Portal.Navigate to the Azure portal.

  2. Suchen Sie nach Ihrem Speicherkonto.Locate your storage account.

  3. Wählen Sie im Abschnitt Einstellungen der Speicherkontoübersicht die Option Zugriffsschlüssel.In the Settings section of the storage account overview, select Access keys. Die Zugriffsschlüssel und die Verbindungszeichenfolge des Kontos werden angezeigt.Your account access keys and connection string are displayed.

  4. 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.

  5. Suchen Sie unter key1 nach dem Wert für Schlüssel, und klicken Sie dann auf die Schaltfläche Kopieren, um den Kontoschlüssel zu kopieren.Find the Key value under key1, and click the Copy button 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 Schlüssel Ihres Speicherkontos sicher gespeichert werden.This solution requires that you securely store the name and key of your storage account. Speichern Sie sie in lokalen Umgebungsvariablen des Computers, auf dem das Beispiel ausgeführt wird.Store them in environment variables local to the machine that runs the sample. Befolgen Sie je nach Betriebssystem die Schritte für das Linux- oder das Windows-Beispiel, um die Umgebungsvariablen zu erstellen.Follow either the Linux or the Windows example, depending on your operating system, to create the environment variables.

Linux-BeispielLinux example

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

Windows-BeispielWindows example

setx AZURE_STORAGE_ACCOUNT "<youraccountname>"
setx AZURE_STORAGE_ACCESS_KEY "<youraccountkey>"

Ausführen des BeispielsRun the sample

In diesem Beispiel wird eine Testdatei im Standardverzeichnis (AppData\Local\Temp) für Windows-Benutzer erstellt.This sample creates a test file in your default directory, AppData\Local\Temp, for Windows users. Anschließend werden Sie aufgefordert, die folgenden Schritte auszuführen:Then it prompts you to take the following steps:

  1. Geben Sie Befehle zum Hochladen der Testdatei in Azure Blob Storage ein.Enter commands to upload the test file to Azure Blob storage.
  2. Listen Sie die Blobs im Container auf.List the blobs in the container.
  3. Laden Sie die hochgeladene Datei unter einem neuen Namen herunter, damit Sie die alte und die neue Datei vergleichen können.Download the uploaded file with a new name so you can compare the old and new files.

Wenn Sie das Beispiel mithilfe von Maven über die Befehlszeile ausführen möchten, öffnen Sie eine Shell, und navigieren Sie zu storage-blobs-java-v10-quickstart innerhalb Ihres geklonten Verzeichnisses.If you want to run the sample using Maven at the command line, open a shell and browse to storage-blobs-java-v10-quickstart inside your cloned directory. Geben Sie dann mvn compile exec:java ein.Then enter mvn compile exec:java.

In diesem Beispiel ist die Ausgabe gezeigt, wenn Sie die Anwendung unter Windows ausführen.This example shows your output if you run the application on Windows.

Created quickstart container
Enter a command
(P)utBlob | (L)istBlobs | (G)etBlob | (D)eleteBlobs | (E)xitSample
# Enter a command :
P
Uploading the sample file into the container: https://<storageaccount>.blob.core.windows.net/quickstart
# Enter a command :
L
Listing blobs in the container: https://<storageaccount>.blob.core.windows.net/quickstart
Blob name: SampleBlob.txt
# Enter a command :
G
Get the blob: https://<storageaccount>.blob.core.windows.net/quickstart/SampleBlob.txt
The blob was downloaded to C:\Users\<useraccount>\AppData\Local\Temp\downloadedFile13097087873115855761.txt
# Enter a command :
D
Delete the blob: https://<storageaccount>.blob.core.windows.net/quickstart/SampleBlob.txt

# Enter a command :
>> Blob deleted: https://<storageaccount>.blob.core.windows.net/quickstart/SampleBlob.txt
E
Cleaning up the sample and exiting!

Da Sie die Kontrolle über das Beispiel haben, geben Sie Befehle ein, damit der Code ausgeführt wird.You control the sample, so enter commands to have it run the code. Bei Eingaben muss die Groß-/Kleinschreibung beachtet werden.Inputs are case sensitive.

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 like 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 gives you access to your storage account information.

Überprüfen Sie die Dateien.Verify the files. Drücken Sie anschließend E und die EINGABETASTE, um die Demo zu beenden und die Testdateien zu löschen.Then select E and select Enter to finish the demo and delete the test files. Da Sie jetzt wissen, welche Aktionen mit dem Beispiel ausgeführt werden, öffnen Sie die Datei Quickstart.java, um den Code zu betrachten.Now that you know what the sample does, open the Quickstart.java file to look at the code.

Grundlagen des BeispielcodesUnderstand the sample code

In den nächsten Abschnitten gehen wir schrittweise durch den Beispielcode, damit Sie nachvollziehen können, wie er funktioniert.The following sections walk through the sample code so you can understand how it works.

Abrufen von Verweisen auf die SpeicherobjekteGet references to the storage objects

Zunächst erstellen Sie die Verweise auf die Objekte, die zum Zugreifen auf und Verwalten von Blob Storage verwendet werden.First, you create the references to the objects that are used to access and manage Blob storage. Diese Objekte bauen aufeinander auf.These objects build on each other. Jedes wird vom jeweils nächsten Objekt in der Liste verwendet.Each is used by the next one in the list.

  1. Erstellen Sie eine Instanz des Objekts StorageURL, das auf das Speicherkonto verweist.Create an instance of the StorageURL object that points to the storage account.

    • Das Objekt StorageURL ist eine Darstellung Ihres Speicherkontos.The StorageURL object is a representation of your storage account. Sie generieren damit eine neue Pipeline.You use it to generate a new pipeline.
    • Bei einer Pipeline handelt es sich um eine Reihe von Richtlinien, die zum Bearbeiten von Anforderungen und Antworten mit Autorisierungs-, Protokollierungs- und Wiederholungsmechanismen verwendet werden.A pipeline is a set of policies that is used to manipulate requests and responses with authorization, logging, and retry mechanisms. Weitere Informationen finden Sie unter Azure Storage Java V10 Overview (Übersicht über Azure Storage Java v10).For more information, see HTTP Pipeline.
    • Erstellen Sie mithilfe der Pipeline eine Instanz des ServiceURL-Objekts.By using the pipeline, create an instance of the ServiceURL object.
    • Erstellen Sie mithilfe des ServiceURL-Objekts eine Instanz von ContainerURL.By using the ServiceURL object, create an instance of the ContainerURL.
    • Das ContainerURL-Element ist zum Ausführen von Vorgängen für Blobcontainer erforderlich.The ContainerURL is necessary to run operations on blob containers.
  2. Erstellen Sie eine Instanz des ContainerURL-Objekts, das den Container darstellt, auf den Sie zugreifen.Create an instance of the ContainerURL object that represents the container you're accessing. Container organisieren Ihre Blobs, so wie auf Ihrem Computer Ordner zum Organisieren von Dateien verwendet werden.Containers organize your blobs in the same way that folders on your computer organize your files.

    • Das ContainerURL-Objekt stellt einen Zugriffspunkt für den Containerdienst bereit.The ContainerURL provides a point of access to the container service.
    • Erstellen Sie mithilfe des ServiceURL-Objekts eine Instanz des BlobURL-Objekts.You can create an instance of the BlobURL object by using the ContainerURL.
    • BlobURL ist zum Erstellen von Blobs erforderlich.The BlobURL is necessary to create blobs.
  3. Erstellen Sie eine Instanz des BlobURL-Objekts, das auf das Blob verweist, das für Sie von Interesse ist.Create an instance of the BlobURL object that points to the specific blob you're interested in.

Wichtig

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

Erstellen eines ContainersCreate a container

In diesem Abschnitt erstellen Sie eine Instanz des ContainerURL-Objekts.In this section, you create an instance of the ContainerURL. Dabei erstellen Sie auch einen neuen Container.You create a new container along with it. Der Name des Containers in diesem Beispiel lautet quickstart.The container in the sample is called quickstart.

In diesem Beispiel wird ContainerURL.create verwendet, damit bei jedem Ausführen des Beispiels ein neuer Container erstellt werden kann.This example uses ContainerURL.create, so you can create a new container each time the sample runs. Sie können den Container auch im Voraus erstellen, damit er nicht im Code erstellt werden muss.Or you can create the container ahead of time, so you don't need to create it in the code.

// Create a ServiceURL to call the Blob service. We will also use this to construct the ContainerURL
SharedKeyCredentials creds = new SharedKeyCredentials(accountName, accountKey);
// We are using a default pipeline here, you can learn more about it at https://github.com/Azure/azure-storage-java/wiki/Azure-Storage-Java-V10-Overview
final ServiceURL serviceURL = new ServiceURL(new URL("http://" + accountName + ".blob.core.windows.net"), StorageURL.createPipeline(creds, new PipelineOptions()));

// Let's create a container using a blocking call to Azure Storage
// If container exists, we'll catch and continue
containerURL = serviceURL.createContainerURL("quickstart");

try {
    ContainersCreateResponse response = containerURL.create(null, null).blockingGet();
    System.out.println("Container Create Response was " + response.statusCode());
} catch (RestException e){
    if (e instanceof RestException && ((RestException)e).response().statusCode() != 409) {
        throw e;
    } else {
        System.out.println("quickstart container already exists, resuming...");
    }
}

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 verwendet.Block blobs are the most commonly used. Sie werden in diesem Schnellstart verwendet.They're used in this quickstart.

  1. Um eine Datei in ein Blob hochzuladen, rufen Sie einen Verweis auf das Blob im Zielcontainer ab.To upload a file to a blob, get a reference to the blob in the target container.

  2. Nachdem Sie den Blobverweis abgerufen haben, können Sie mithilfe einer der folgenden APIs eine Datei in das Blob hochladen:After you get the blob reference, you can upload a file to it by using either of the following APIs:

Der Beispielcode erstellt eine lokale Datei zur Verwendung für den Upload und Download.The sample code creates a local file to be used for the upload and download. Die hochzuladende Datei wird als sourceFile und die URL des Blobs in blob gespeichert.It stores the file to be uploaded as sourceFile and stores the URL of the blob in blob. Im folgenden Beispiel wird die Datei in einen Container mit dem Namen quickstart hochgeladen.The following example uploads the file to your container called quickstart.

static void uploadFile(BlockBlobURL blob, File sourceFile) throws IOException {

    FileChannel fileChannel = FileChannel.open(sourceFile.toPath());

    // Uploading a file to the blobURL using the high-level methods available in TransferManager class
    // Alternatively call the Upload/StageBlock low-level methods from BlockBlobURL type
    TransferManager.uploadFileToBlockBlob(fileChannel, blob, 8*1024*1024, null)
        .subscribe(response-> {
            System.out.println("Completed upload request.");
            System.out.println(response.response().statusCode());
        });
}

Blockblobs können jede Art von Text oder Binärdateien darstellen.Block blobs can be any type of text or binary file. Seitenblobs werden in erster Linie für die VHD-Dateien verwendet, die IaaS-VMs zugrunde liegen.Page blobs are primarily used for the VHD files used to back IaaS VMs. Anfügeblobs werden zum Anfügen von Daten an das Ende und häufig zum Protokollieren verwendet.Append blobs are used to append data to the end, and they're often used for logging. Die meisten Objekte, die in Blob Storage gespeichert werden, sind allerdings Blockblobs.Most objects stored in Blob storage are block blobs.

Auflisten der Blobs in einem ContainerList the blobs in a container

Mit ContainerURL.listBlobsFlatSegment können Sie eine Liste mit Objekten in einem Container abrufen.You can get a list of objects in a container by using ContainerURL.listBlobsFlatSegment. Mit dieser Methode werden bis zu 5.000 Objekte auf einmal sowie eine Fortsetzungsmarkierung (next-Markierung) zurückgegeben, falls weitere Objekte im Container enthalten sind.This method returns up to 5,000 objects at once along with a continuation, or next, marker if there are more to list in the container. Erstellen Sie eine Hilfsfunktion, die sich selbst wiederholt aufruft, wenn in der vorherigen listBlobsFlatSegment-Antwort eine next-Markierung vorhanden ist.Create a helper function that calls itself repeatedly when there's a next marker in the previous listBlobsFlatSegment response.

static void listBlobs(ContainerURL containerURL) {
    // Each ContainerURL.listBlobsFlatSegment call return up to maxResults (maxResults=10 passed into ListBlobOptions below).
    // To list all Blobs, we are creating a helper static method called listAllBlobs,
    // and calling it after the initial listBlobsFlatSegment call
    ListBlobsOptions options = new ListBlobsOptions(null, null, 10);

    containerURL.listBlobsFlatSegment(null, options)
        .flatMap(containersListBlobFlatSegmentResponse ->
            listAllBlobs(containerURL, containersListBlobFlatSegmentResponse))
                .subscribe(response-> {
                    System.out.println("Completed list blobs request.");
                    System.out.println(response.statusCode());
                });
}

private static Single <ContainersListBlobFlatSegmentResponse> listAllBlobs(ContainerURL url, ContainersListBlobFlatSegmentResponse response) {
    // Process the blobs returned in this result segment (if the segment is empty, blobs() will be null.
    if (response.body().blobs() != null) {
        for (Blob b : response.body().blobs().blob()) {
            String output = "Blob name: " + b.name();
            if (b.snapshot() != null) {
                output += ", Snapshot: " + b.snapshot();
            }
            System.out.println(output);
        }
    }
    else {
        System.out.println("There are no more blobs to list off.");
    }

    // If there is not another segment, return this response as the final response.
    if (response.body().nextMarker() == null) {
        return Single.just(response);
    } else {
        /*
        IMPORTANT: ListBlobsFlatSegment returns the start of the next segment; you MUST use this to get the next
        segment (after processing the current result segment
        */

        String nextMarker = response.body().nextMarker();

        /*
        The presence of the marker indicates that there are more blobs to list, so we make another call to
        listBlobsFlatSegment and pass the result through this helper function.
        */

        return url.listBlobsFlatSegment(nextMarker, new ListBlobsOptions(null, null,1))
            .flatMap(containersListBlobFlatSegmentResponse ->
                listAllBlobs(url, containersListBlobFlatSegmentResponse));
    }
}

Herunterladen von BlobsDownload blobs

Laden Sie mithilfe von BlobURL.download Blobs auf Ihren lokalen Datenträger herunter.Download blobs to your local disk by using BlobURL.download.

Durch den folgenden Code wird der in einem vorherigen Abschnitt hochgeladene Blob heruntergeladen.The following code downloads the blob uploaded in a previous section. _DOWNLOADED wird als Suffix an den Blobnamen angefügt, damit Sie beide Dateien auf dem lokalen Datenträger sehen können.It adds a suffix of _DOWNLOADED to the blob name, so you can see both files on local disk.

static void getBlob(BlockBlobURL blobURL, File sourceFile) {
    try {
        // Get the blob using the low-level download method in BlockBlobURL type
        // com.microsoft.rest.v2.util.FlowableUtil is a static class that contains helpers to work with Flowable
        blobURL.download(new BlobRange(0, Long.MAX_VALUE), null, false)
            .flatMapCompletable(response -> {
                AsynchronousFileChannel channel = AsynchronousFileChannel.open(Paths
                    .get(sourceFile.getPath()), StandardOpenOption.CREATE,  StandardOpenOption.WRITE);
                        return FlowableUtil.writeFile(response.body(), channel);
            }).doOnComplete(()-> System.out.println("The blob was downloaded to " + sourceFile.getAbsolutePath()))
            // To call it synchronously add .blockingAwait()
            .subscribe();
    } catch (Exception ex){
        System.out.println(ex.toString());
    }
}

Bereinigen von RessourcenClean up resources

Wenn Sie die in diesem Schnellstart hochgeladenen Blobs nicht mehr benötigen, können Sie mit ContainerURL.delete den gesamten Container löschen.If you don't need the blobs uploaded in this quickstart, you can delete the entire container by using ContainerURL.delete. Mit dieser Methode werden auch die Dateien im Container gelöscht.This method also deletes the files in the container.

containerURL.delete(null).blockingGet();

Nächste SchritteNext steps

In diesem Schnellstart haben Sie gelernt, wie Sie mit Java 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 by using Java.