Hochladen einer Datei in einen Azure Blob Storage

In diesem Lernprogramm erfahren Sie, wie Sie Container-Blobs in einem Azure Blob Storage-Konto aus einer Spring Boot-Anwendung hochladen und lesen.

Azure Blob Storage ist die Objektspeicherlösung von Microsoft für die Cloud. Blob-Speicher ist für das Speichern einer massiven Menge unstrukturierter Daten optimiert, z. B. Text- oder Binärdaten.

Voraussetzungen

  • Azure-Abonnement (kostenloses Abonnement erstellen)
  • Java Development Kit (JDK) Version 8 oder höher.
  • Apache Maven, Version 3.0 oder höher.
  • cURL oder ein ähnliches HTTP-Hilfsprogramm zum Testen der Funktionalität.
  • Ein Azure-Speicherkonto und -Container. Erstellen Sie ein Speicherkonto, falls Sie noch keines besitzen.
  • Ein Spring Boot-Anwendung. Wenn Sie keine Spring Boot-Anwendung besitzen, erstellen Sie mit Spring Initializr ein Maven-Projekt. Achten Sie darauf, Maven Project (Maven-Projekt) auszuwählen, fügen Sie unter Dependencies (Abhängigkeiten) die Abhängigkeit Spring Web hinzu, und wählen Sie dann Java-Version 8 oder höher aus.

Hinweis

Um Ihrem Konto Zugriff auf Ressourcen zu gewähren, weisen Sie in Ihrem neu erstellten Azure Storage-Konto die Storage Blob Data Contributor Rolle dem Microsoft Entra-Konto zu, das Sie derzeit verwenden. Weitere Informationen finden Sie unter Weisen Sie Azure-Rollen über das Azure-Portal zu.

Wichtig

Spring Boot Version 2.5 oder höher ist erforderlich, um die Schritte in diesem Lernprogramm auszuführen.

Container erstellen

Erstellen Sie zunächst einen Container mit dem Namen testcontainer nach den Anweisungen in der Schnellstartanleitung: Hochladen, Herunterladen und Listen-Blobs mit dem Azure-Portal.

Hochladen und Lesen von Blobs aus dem Azure Storage-Kontocontainer

Nachdem Sie nun über ein Azure Storage-Konto und einen Container verfügen, können Sie Dateien aus Blobs mit Spring Cloud Azure hochladen und lesen.

Um das Spring Cloud Azure Storage Blob Starter-Modul zu installieren, fügen Sie Ihrer pom.xml Datei die folgenden Abhängigkeiten hinzu:

  • Die Spring Cloud Azure Bill of Materials (BOM):

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.azure.spring</groupId>
          <artifactId>spring-cloud-azure-dependencies</artifactId>
          <version>5.11.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    Hinweis

    Wenn Sie Spring Boot 2.x verwenden, stellen Sie sicher, dass Sie die spring-cloud-azure-dependencies Version auf 4.17.0. Diese Stückliste (Bill of Material, BOM) sollte im <dependencyManagement> Abschnitt Ihrer pom.xml Datei konfiguriert werden. Dadurch wird sichergestellt, dass alle Spring Cloud Azure-Abhängigkeiten dieselbe Version verwenden. Weitere Informationen zu der version, die für diese BOM verwendet wird, finden Sie unter Welche Version von Spring Cloud Azure sollte ich verwenden.

  • Das Spring Cloud Azure Storage Blob Starter-Artefakt:

    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-starter-storage-blob</artifactId>
    </dependency>
    

Codieren der Anwendung

Um Dateien aus Blobs mithilfe des Spring Cloud Azure Storage Blob Starter hochzuladen und zu lesen, konfigurieren Sie die Anwendung mithilfe der folgenden Schritte.

  1. Konfigurieren Sie einen Speicherkontonamen und einen Endpunkt in der Konfigurationsdatei "application.properties ", wie im folgenden Beispiel gezeigt.

    spring.cloud.azure.storage.blob.account-name=${AZURE_STORAGE_ACCOUNT_NAME}
    spring.cloud.azure.storage.blob.endpoint=${AZURE_STORAGE_ACCOUNT_ENDPOINT}
    
  2. Erstellen Sie eine neue BlobController Java-Klasse, wie im folgenden Beispiel gezeigt. Diese Klasse wird verwendet, um Dateien aus dem Container-Blob im Azure Storage-Konto hochzuladen und zu lesen.

    package com.example.demo;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.core.io.Resource;
    import org.springframework.core.io.WritableResource;
    import org.springframework.util.StreamUtils;
    import org.springframework.web.bind.annotation.*;
    
    import java.io.IOException;
    import java.io.OutputStream;
    import java.nio.charset.Charset;
    
    @RestController
    @RequestMapping("blob")
    public class BlobController {
    
        @Value("azure-blob://testcontainer/test.txt")
        private Resource blobFile;
    
        @GetMapping("/readBlobFile")
        public String readBlobFile() throws IOException {
            return StreamUtils.copyToString(
                    this.blobFile.getInputStream(),
                    Charset.defaultCharset());
        }
    
        @PostMapping("/writeBlobFile")
        public String writeBlobFile(@RequestBody String data) throws IOException {
            try (OutputStream os = ((WritableResource) this.blobFile).getOutputStream()) {
                os.write(data.getBytes());
            }
            return "file was updated";
        }
    }
    

    Tipp

    In diesem Lernprogramm gibt es keine Authentifizierungsvorgänge in den Konfigurationen oder im Code. Für die Verbindung mit Azure-Diensten ist jedoch eine Authentifizierung erforderlich. Um die Authentifizierung abzuschließen, müssen Sie Azure Identity verwenden. Spring Cloud Azure verwendet DefaultAzureCredential, die von der Azure Identity-Bibliothek bereitgestellt wird, um Anmeldeinformationen ohne Codeänderungen zu erhalten.

    DefaultAzureCredential“ unterstützt mehrere Authentifizierungsmethoden und bestimmt, welche Methode zur Laufzeit verwendet wird. Mit diesem Ansatz kann Ihre App unterschiedliche Authentifizierungsmethoden in verschiedenen Umgebungen (z. B. in lokalen und Produktionsumgebungen) verwenden, ohne umgebungsspezifischen Code zu implementieren. Weitere Informationen finden Sie unter DefaultAzureCredential.

    Um die Authentifizierung in lokalen Entwicklungsumgebungen abzuschließen, können Sie Azure CLI, Visual Studio Code, PowerShell oder andere Methoden verwenden. Weitere Informationen finden Sie unter Azure-Authentifizierung in Java-Entwicklungsumgebungen. Um die Authentifizierung in Azure-Hostingumgebungen abzuschließen, empfehlen wir die Verwendung der vom Benutzer zugewiesenen verwalteten Identität. Weitere Informationen finden Sie unter Was sind verwaltete Identitäten für Azure-Ressourcen?.

  3. Nachdem Ihre Anwendung ausgeführt wurde, verwenden Sie curl diese Schritte, um Ihre Anwendung zu testen.

    1. Senden Sie eine POST-Anforderung, um den Inhalt einer Datei mithilfe des folgenden Befehls zu aktualisieren:

      curl http://localhost:8080/blob/writeBlobFile -d "new message" -H "Content-Type: text/plain"
      

      Sie sollten eine Antwort sehen, die besagt file was updated.

    2. Senden Sie eine GET-Anforderung, um den Inhalt der Datei mithilfe des folgenden Befehls zu überprüfen:

      curl -X GET http://localhost:8080/blob/readBlobFile
      

      Der Text der „neuen Nachricht“, die Sie gepostet haben, sollte angezeigt werden.

Bereitstellen in Azure Spring Apps

Nachdem Sie nun die Spring Boot-Anwendung lokal ausgeführt haben, ist es an der Zeit, sie in die Produktion zu verschieben. Azure Spring Apps erleichtert die Bereitstellung von Spring Boot-Anwendungen in Azure ohne Codeänderungen. Der Dienst verwaltet die Infrastruktur von Spring-Anwendungen und ermöglicht es Entwicklern dadurch, sich auf ihren Code zu konzentrieren. Azure Spring Apps bietet eine Lebenszyklusverwaltung mit umfassender Überwachung und Diagnose, Konfigurationsverwaltung, Dienstermittlung, CI/CD-Integration, Blau/Grün-Bereitstellungen und mehr. Informationen zum Bereitstellen Ihrer Anwendung in Azure Spring Apps finden Sie unter Bereitstellen Ihrer ersten Anwendung in Azure Spring Apps.

Nächste Schritte

Weitere Informationen zu Spring und Azure finden Sie im Dokumentationscenter zu Spring in Azure.

Weitere Informationen

Weitere Informationen zu den zusätzlichen Spring Boot Starters, die für Microsoft Azure verfügbar sind, finden Sie unter Was ist Spring Cloud Azure?

Weitere Informationen zu zusätzlichen Azure-Speicher-APIs, die Sie aus Ihren Spring Boot-Anwendungen aufrufen können, finden Sie in den folgenden Artikeln: