Övning – Konfigurera och initiera klientbiblioteket
Det vanliga arbetsflödet för appar som använder Azure Blob Storage är följande:
Hämta konfiguration: Vid start läser du in konfigurationen av lagringskontot, vanligtvis ett lagringskonto anslutningssträng.
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.
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:
Instansiera ett nytt
BlobServiceClientobjekt och ange anslutningssträng till ditt lagringskonto.Om du vill få ett
BlobContainerClientanroparGetBlobContainerClientdu 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 = 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:
Skapa en
BlobServiceClientgenom att instansiera ett nyttBlobServiceClientBuilderobjekt med hjälp av anslutningssträng till ditt lagringskonto.Hämta en
BlobContainerClientgenom att anropagetBlobContainerClientmetoden 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
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 .Ö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 heterstorageför att utföra sin funktion. Det finns en ofullständig implementering avIStoragei Modeller/BlobStorage.cs att fylla i.-
Index: (
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 restoreDet 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
Öppna Modeller/BlobStorage.cs i redigeringsprogrammet. Överst i filen lägger du till följande
usinginstruktioner 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;Leta upp metoden
Initialize. Din app anropar den här metoden när den användsBlobStorageför första gången. Om du är nyfiken kan du titta påConfigureServicesi 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 avInitializemed 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
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 .Ö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
uploadedFileegenskapen av JSF-ramverket. - download: laddar ned en enskild fil med dess namn.
För att utföra sitt arbete använder varje metod en
Storageinstans med namnetstorage. Det finns en ofullständig implementering avStoragei 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.
Öppna filen pom.xml i redigeraren.
Lägg till Azure BOM i projektet genom att lägga till följande
dependencyManagementavsnitt under xml-taggenproject.<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>Om du vill lägga till Azure Storage SDK för Java lägger du till följande
dependencyiproject/dependenciesxml-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
Öppna src/main/java/com/microsoft/azure/samples/service/BlobStorage.java i redigeraren. Överst i filen lägger du till följande
importinstruktioner 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;Lägg till en klassegenskap i
BlobStorageklassen för att lagra referensenBlobContainerClient.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.
BlobStoragekommenteras med@Singletondärför rekommenderas att du lagrar referensenBlobContainerClienti dess fält.initLeta upp metoden med@PostConstructanteckningar. Appen anropar den här metoden när instansenBlobStoragehar 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 avinitmed 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(); } }