Caricare un file in un Archiviazione BLOB di Azure

Questa esercitazione illustra come caricare e leggere da BLOB di contenitori in un account Archiviazione BLOB di Azure da un'applicazione Spring Boot.

Archiviazione BLOB di Azure è la soluzione Microsoft per l'archiviazione di oggetti per il cloud. L'archiviazione BLOB è ottimizzata per l'archiviazione di una grande quantità di dati non strutturati, ad esempio dati di testo o binari.

Prerequisiti

  • Una sottoscrizione di Azure: creare un account gratuitamente.
  • Java Development Kit (JDK) versione 8 o successiva.
  • Apache Maven, versione 3.0 o successiva.
  • cURL o un'utilità HTTP simile per testare la funzionalità.
  • Un account di archiviazione e un contenitore di Azure. Se non è disponibile, creare un account di archiviazione.
  • Applicazione Spring Boot. Se non è disponibile, creare un progetto Maven con Spring Initializr. Assicurarsi di selezionare Progetto Maven e, in Dipendenze, aggiungere la dipendenza Spring Web e quindi selezionare Java versione 8 o successiva.

Nota

Per concedere all'account l'accesso alle risorse, nell'account Archiviazione di Azure appena creato assegnare il Storage Blob Data Contributor ruolo all'account Microsoft Entra attualmente in uso. Per ulteriori informazioni, vedi Assegnare ruoli di Azure usando il portale di Azure.

Importante

Spring Boot versione 2.5 o successiva è necessario per completare i passaggi di questa esercitazione.

Creazione di un contenitore

Creare prima di tutto un contenitore denominato testcontainer seguendo le istruzioni riportate in Avvio rapido: Caricare, scaricare ed elencare BLOB con il portale di Azure.

Caricare e leggere BLOB dal contenitore di account Archiviazione di Azure

Ora che si ha un account e un contenitore Archiviazione di Azure, è possibile caricare e leggere i file dai BLOB con Spring Cloud Azure.

Per installare il modulo Spring Cloud Archiviazione di Azure Blob Starter, aggiungere le dipendenze seguenti al file pom.xml:

  • 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>
    

    Nota

    Se si usa Spring Boot 2.x, assicurarsi di impostare la spring-cloud-azure-dependencies versione su 4.17.0. Questa distinta base deve essere configurata nella <dependencyManagement> sezione del file di pom.xml . In questo modo tutte le dipendenze di Spring Cloud Azure usano la stessa versione. Per altre informazioni sulla versione usata per questa distinta base, vedere La versione di Spring Cloud azure da usare.

  • L'artefatto Spring Cloud Archiviazione di Azure Blob Starter:

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

Codice dell'applicazione

Per caricare e leggere file da BLOB usando Spring Cloud Archiviazione di Azure Blob Starter, configurare l'applicazione seguendo questa procedura.

  1. Configurare un Archiviazione nome dell'account e un endpoint nel file di configurazione application.properties, come illustrato nell'esempio seguente.

    spring.cloud.azure.storage.blob.account-name=${AZURE_STORAGE_ACCOUNT_NAME}
    spring.cloud.azure.storage.blob.endpoint=${AZURE_STORAGE_ACCOUNT_ENDPOINT}
    
  2. Creare una nuova BlobController classe Java come illustrato nell'esempio seguente. Questa classe viene usata per caricare e leggere file dal BLOB del contenitore nell'account Archiviazione di Azure.

    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";
        }
    }
    

    Suggerimento

    In questa esercitazione non sono presenti operazioni di autenticazione nelle configurazioni o nel codice. Tuttavia, la connessione ai servizi di Azure richiede l'autenticazione. Per completare l'autenticazione, è necessario usare Identità di Azure. Spring Cloud Azure usa DefaultAzureCredential, che la libreria di identità di Azure fornisce per ottenere le credenziali senza modifiche al codice.

    DefaultAzureCredential supporta più metodi di autenticazione e determina il metodo da usare in fase di esecuzione. Questo approccio consente all'app di usare metodi di autenticazione diversi in ambienti diversi (ad esempio ambienti locali e di produzione) senza implementare codice specifico dell'ambiente. Per altre informazioni, vedere DefaultAzureCredential.

    Per completare l'autenticazione negli ambienti di sviluppo locali, è possibile usare l'interfaccia della riga di comando di Azure, Visual Studio Code, PowerShell o altri metodi. Per altre informazioni, vedere Autenticazione di Azure in ambienti di sviluppo Java. Per completare l'autenticazione negli ambienti di hosting di Azure, è consigliabile usare l'identità gestita assegnata dall'utente. Per altre informazioni, vedere Informazioni sulle identità gestite per le risorse di Azure

  3. Dopo l'esecuzione dell'applicazione, usare curl per testare l'applicazione seguendo questa procedura.

    1. Inviare una richiesta POST per aggiornare il contenuto di un file usando il comando seguente:

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

      Verrà visualizzata una risposta che indica file was updated.

    2. Inviare una richiesta GET per verificare il contenuto del file usando il comando seguente:

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

      Verrà visualizzato il testo "nuovo messaggio" pubblicato.

Distribuire in Azure Spring Apps

Ora che l'applicazione Spring Boot è in esecuzione in locale, è possibile spostarla nell'ambiente di produzione. Azure Spring Apps semplifica la distribuzione di applicazioni Spring Boot in Azure senza modifiche al codice. Il servizio gestisce l'infrastruttura delle applicazioni Spring per consentire agli sviluppatori di concentrarsi sul codice. Azure Spring Apps offre la gestione del ciclo di vita usando monitoraggio e diagnostica completi, gestione della configurazione, individuazione dei servizi, integrazione CI/CD, distribuzioni blu-verde e altro ancora. Per distribuire l'applicazione in Azure Spring Apps, vedere Distribuire la prima applicazione in Azure Spring Apps.

Passaggi successivi

Per altre informazioni su Spring e Azure, passare al centro di documentazione di Spring in Azure.

Vedi anche

Per altre informazioni sugli starter Spring Boot aggiuntivi disponibili per Microsoft Azure, vedere Che cos'è Spring Cloud Azure?

Per altre informazioni sulle API di archiviazione di Azure aggiuntive che è possibile chiamare dalle applicazioni Spring Boot, vedere gli articoli seguenti: