Övning – Konfigurera och initiera klientbiblioteket

Slutförd

Det vanliga arbetsflödet för appar som använder Azure Blob Storage är följande:

  1. Hämta konfiguration: Vid start läser du in konfigurationen av lagringskontot, vanligtvis ett lagringskonto anslutningssträng.

  2. Initiera klienten: Om du vill initiera Azure Storage-klientbiblioteket använder du anslutningssträng. Den här initieringen skapar de objekt som appen använder för att arbeta med Blob Storage-API:et.

  3. Använd: Om du vill använda containrar och blobar gör du API-anrop med hjälp av klientbiblioteket.

Anmärkning

Den här övningen är valfri. Om du vill slutföra den här övningen måste du skapa en Azure-prenumeration innan du börjar. Om du inte har något Azure-konto eller om du inte vill skapa ett för tillfället kan du läsa igenom anvisningarna så att du förstår den information som visas.

Anmärkning

I den här lektionen använder du Azure Cloud Shell som terminal. Du kan komma åt Cloud Shell via Azure-portalen eller Cloud Shell-inloggningen. Du behöver inte installera något på din dator eller bärbara dator för att använda den.

Konfigurera anslutningssträngen

Innan du kör appen hämtar du anslutningssträng för det lagringskonto som du använder. Du kan använda valfritt Azure-hanteringsgränssnitt för att hämta det, inklusive Azure Portal, Azure CLI och Azure PowerShell. När du konfigurerar webbappen för att köra koden i slutet av den här modulen använder du Azure CLI för att hämta anslutningssträng för lagringskontot som du skapade tidigare.

Lagringskontons anslutningssträngar innehåller kontonyckeln. Betrakta kontonyckeln som en hemlighet och lagra den alltid på ett säkert sätt. Här lagrar du anslutningssträng i en App Service-appinställning. Appinställningar för App Service är en säker plats för apphemligheter. Den här designen stöder inte lokal utveckling och är inte en robust lösning från slutpunkt till slutpunkt på egen hand.

Viktigt!

I det här kodexemplet används en anslutningssträng för att auktorisera åtkomst till ditt lagringskonto. Den här konfigurationen är till exempel. Anslutningssträngar och kontoåtkomstnycklar bör användas med försiktighet i programkoden. Om din kontoåtkomstnyckel går förlorad eller oavsiktligt placeras på en osäker plats kan tjänsten bli sårbar. Alla som har åtkomstnyckeln kan auktorisera begäranden mot lagringskontot och har effektivt åtkomst till alla data.

För optimal säkerhet rekommenderar Microsoft att du använder hanterade identiteter för Azure-resurser för att auktorisera begäranden mot blob-, kö- och tabelldata när det är möjligt. Mer information finns i Auktorisera åtkomst till blobar med hjälp av Microsoft Entra-ID.

Initiera objektmodellen för Blob Storage

I Azure Storage SDK för .NET är standardmönstret för att använda Blob Storage följande:

  1. Instansiera ett nytt BlobServiceClient objekt och ange anslutningssträng till ditt lagringskonto.

  2. Om du vill få ett BlobContainerClientanropar GetBlobContainerClient du med namnet på BlobServiceClient den container som du vill interagera med eller skapa.

I kod ser de här stegen ut så här.

BlobServiceClient blobServiceClient = new BlobServiceClient(storageConfig.ConnectionString);
BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(storageConfig.FileContainerName);

Den här initieringskoden utför inga anrop via nätverket. Det innebär att vissa undantag som inträffar på grund av felaktig information inte utlöses förrän senare. Om till exempel en felaktigt formaterad anslutningssträng skickas till konstruktorn för BlobServiceClient klassen utlöses ett undantag omedelbart. Men om anslutningssträng pekar på ett lagringskonto som inte finns utlöses inget undantag förrän du försöker utföra en åtgärd mot lagringskontot.

I Azure Storage SDK för Java består standardmönstret för att använda Blob Storage av följande steg:

  1. Skapa en BlobServiceClient genom att instansiera ett nytt BlobServiceClientBuilder objekt med hjälp av anslutningssträng till ditt lagringskonto.

  2. Hämta en BlobContainerClient genom att anropa getBlobContainerClient metoden på med namnet på BlobServiceClientden container som du vill interagera med eller skapa.

I kod ser de här stegen ut så här.

BlobServiceClient blobServiceClient = BlobServiceClientBuilder()
    .connectionString(connectionString)
    .buildClient();
BlobContainerClient containerClient = blobServiceClient.getBlobContainerClient(containerName);

Den här initieringskoden utför inga anrop via nätverket. Det innebär att vissa undantag som inträffar på grund av felaktig information inte utlöses förrän senare. Om till exempel en felaktigt formaterad anslutningssträng anges till BlobServiceClientBuildergenereras ett undantag omedelbart. Men om anslutningssträng pekar på ett lagringskonto som inte finns utlöses inget undantag förrän du försöker utföra en åtgärd mot lagringskontot.

Skapa containrar vid start

Om du vill skapa en container när din app startar eller när appen först försöker använda en container anropar du CreateIfNotExistsAsync en BlobContainerClient.

CreateIfNotExistsAsync utlöser inget undantag om containern redan finns, men den gör ett nätverksanrop till Azure Blob Storage. Anropa det en gång under initieringen, inte varje gång du försöker använda en container.

Om du vill skapa en container när din app startar eller när den först försöker använda den anropar exists du en BlobContainerClient för att kontrollera om det redan finns en container. Om den inte finns anropar du create. Anropa det en gång under initieringen, inte varje gång du försöker använda en container.

Övning

Klona och utforska den ofärdiga appen

  1. Klona först startappen från GitHub. Om du vill hämta en kopia av källkoden och öppna den i redigeraren kör du följande kommandon i Azure Shell CLI:

    git clone https://github.com/MicrosoftDocs/mslearn-store-data-in-azure.git
    cd mslearn-store-data-in-azure/store-app-data-with-azure-blob-storage/src/start
    code .
    
  2. Öppna filen Controllers/FilesController.cs i redigeraren. Det finns inget arbete att göra här, men ta en snabb titt på vad appen gör.

    Den här styrenheten implementerar ett API med tre åtgärder:

    • Index: (GET /api/Files) returnerar en lista med URL:er, en för varje fil som har laddats upp. Appens front end anropar den här metoden för att skapa en lista med hyperlänkar till de uppladdade filerna.
    • Ladda upp: (POST /api/Files) tar emot en uppladdad fil och sparar den.
    • Ladda ned: (GET /api/Files/{filename}) laddar ned en enskild fil med dess namn.

    Varje metod använder en IStorage-instans som heter storage för att utföra sin funktion. Det finns en ofullständig implementering av IStorage i Modeller/BlobStorage.cs att fylla i.

Lägga till NuGet-paketet

  • Lägg till en referens till Azure Storage SDK. Kör följande kommandon i Azure Shell CLI:

    dotnet add package Azure.Storage.Blobs
    dotnet restore
    

    Det här kommandot ser till att du använder den senaste versionen av Blob Storage-klientbiblioteket.

Konfigurera

De konfigurationsvärden du behöver är lagringskontots anslutningssträng och namnet på containern som appen använder för att lagra filer. I den här modulen ska du bara köra appen i Azure App Service. Följ apptjänstens metodtips och lagra värdena i App Service-appinställningar. Det gör du när du skapar App Service-instansen. Det finns inget du behöver göra just nu.

När det gäller att använda konfigurationen innehåller startappen den VVS du behöver. Konstruktorparametern IOptions<AzureStorageConfig> i BlobStorage har två egenskaper: lagringskontots anslutningssträng och namnet på containern som appen använder för att lagra blobar. Det finns kod i ConfigureServices metoden Startup.cs som läser in värdena från konfigurationen när appen startar.

Initiera

  1. Öppna Modeller/BlobStorage.cs i redigeringsprogrammet. Överst i filen lägger du till följande using instruktioner för att förbereda den för den kod som du ska lägga till.

    using Azure;
    using Azure.Storage.Blobs;
    using Azure.Storage.Blobs.Models;
    
  2. Leta upp metoden Initialize. Din app anropar den här metoden när den används BlobStorage för första gången. Om du är nyfiken kan du titta på ConfigureServices i Startup.cs för att se hur samtalet görs.

    Initialize är platsen där containern ska skapas om den inte redan finns. Ersätt den aktuella implementeringen av Initialize med följande kod och spara ditt arbete med CTRL +S.

    public Task Initialize()
    {
        BlobServiceClient blobServiceClient = new BlobServiceClient(storageConfig.ConnectionString);
        BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(storageConfig.FileContainerName);
        return containerClient.CreateIfNotExistsAsync();
    }
    

Klona och utforska den ofärdiga appen

  1. Klona först startappen från GitHub. Om du vill hämta en kopia av källkoden och öppna den i redigeraren kör du följande kommandon i Azure Shell CLI:

    git clone https://github.com/MicrosoftDocs/mslearn-store-data-in-azure.git
    cd mslearn-store-data-in-azure/store-java-ee-application-data-with-azure-blob-storage/start
    code .
    
  2. Öppna filen src/main/java/com/microsoft/azure/samples/jsf/IndexBean.java i redigeraren. Det finns inget arbete att göra här, men ta en snabb titt på vad appen gör.

    Den här begäransomfångsbean implementerar tre åtgärder som används av sidan src/main/webapp/index.xhtml Java Server Faces (JSF):

    • listFileNames: returnerar en lista med filnamn, en för varje fil som har laddats upp. Sidan index.xhtml anropar den här metoden för att skapa en lista över hyperlänkar till de uppladdade filerna.
    • upload: tar emot en uppladdad fil och sparar den. Filinnehållet och metadata matas in i uploadedFile egenskapen av JSF-ramverket.
    • download: laddar ned en enskild fil med dess namn.

    För att utföra sitt arbete använder varje metod en Storage instans med namnet storage. Det finns en ofullständig implementering av Storage i src/main/java/com/microsoft/azure/samples/service/BlobStorage.java att fylla i.

Lägg till Azure Storage SDK för Java-referens

Vi rekommenderar att du använder Azure BOM för att lägga till Azure-klientbibliotek i projektet. Det ger ett enkelt och elegant sätt att orkestrera med flera Azure-klientbibliotek samtidigt som du säkerställer minimala beroendekonflikter.

  1. Öppna filen pom.xml i redigeraren.

  2. Lägg till Azure BOM i projektet genom att lägga till följande dependencyManagement avsnitt under xml-taggen project .

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.azure</groupId>
          <artifactId>azure-sdk-bom</artifactId>
          <version>1.0.6</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    
  3. Om du vill lägga till Azure Storage SDK för Java lägger du till följande dependency i project/dependencies xml-avsnittet.

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

Konfigurera

De konfigurationsvärden du behöver är lagringskontot anslutningssträng och namnet på containern som appen använder för att lagra filer. I den här modulen ska du bara köra appen i Azure App Service. Följ apptjänstens metodtips och lagra värdena i App Service-appinställningar. Det gör du när vi skapar App Service-instansen. Det finns inget du behöver göra just nu.

När det gäller att använda konfigurationen skickas App Service-appinställningarna som miljövariabler till appkoden. Du läser dem i initieringskoden.

Initiera

  1. Öppna src/main/java/com/microsoft/azure/samples/service/BlobStorage.java i redigeraren. Överst i filen lägger du till följande import instruktioner för att förbereda den för den kod som du ska lägga till.

    import java.util.stream.Collectors;
    
    import com.azure.storage.blob.BlobClient;
    import com.azure.storage.blob.BlobContainerClient;
    import com.azure.storage.blob.BlobServiceClient;
    import com.azure.storage.blob.BlobServiceClientBuilder;
    import com.azure.storage.blob.models.BlobItem;
    
  2. Lägg till en klassegenskap i BlobStorage klassen för att lagra referensen BlobContainerClient .

    private BlobContainerClient blobContainerClient;
    

    Dricks

    Azure-klienter är tillståndslösa och trådsäkra. Vi rekommenderar att cachelagrar deras instanser där det är tillämpligt. Den app som du arbetar med använder till exempel en enda container med ett konstant namn. Därför är det bäst att cachelagrar den i appens livslängdsomfång. BlobStorage kommenteras med @Singleton därför rekommenderas att du lagrar referensen BlobContainerClient i dess fält.

  3. init Leta upp metoden med @PostConstruct anteckningar. Appen anropar den här metoden när instansen BlobStorage har skapats och innan den används för första gången.

    init är där du kan skapa containern om den inte redan finns. Ersätt den aktuella implementeringen av init med följande kod och spara ditt arbete.

    @PostConstruct
    private void init() {
        String connectionString = System.getenv("STORAGE_CONNECTION_STRING");
        String containerName = System.getenv("STORAGE_CONTAINER_NAME");
        BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
            .connectionString(connectionString)
            .buildClient();
        blobContainerClient = blobServiceClient.getBlobContainerClient(containerName);
        if (!blobContainerClient.exists()) {
            blobContainerClient.create();
        }
    }