Gyakorlat – Az ügyfélkódtár konfigurálása és inicializálása
Az Azure Blob Storage-t használó alkalmazások tipikus munkafolyamata a következő:
Konfiguráció lekérése: Indításkor töltse be a tárfiók konfigurációját, általában egy tárfiók kapcsolati sztring.
Ügyfél inicializálása: Az Azure Storage-ügyfélkódtár inicializálásához használja a kapcsolati sztring. Ez az inicializálás létrehozza azokat az objektumokat, amelyeket az alkalmazás a Blob Storage API használatához használ.
Használat: Tárolókon és blobokon való működéshez API-hívásokat kezdeményezhet az ügyfélkódtár használatával.
A kapcsolati sztring konfigurálása
Az alkalmazás futtatása előtt kérje le a használt tárfiók kapcsolati sztring. A lekéréshez bármilyen Azure felügyeleti felületet használhat, beleértve az Azure Portalt, az Azure CLI-t és az Azure PowerShellt. Amikor a webalkalmazást úgy állítja be, hogy a modul végén futtassa a kódot, az Azure CLI-vel lekérheti a korábban létrehozott tárfiók kapcsolati sztring.
A tárfiókok kapcsolati sztringjei tartalmazzák a fiókkulcsot. A fiókkulcsot titkosnak kell tekinteni. Biztonságosan tárolja. Itt egy App Service-alkalmazásbeállításban tárolhatja a kapcsolati sztring. Az App Service alkalmazásbeállításai biztonságos helyet jelentenek az alkalmazás titkos kulcsainak. Ez a kialakítás nem támogatja a helyi fejlesztést, és önmagában nem egy robusztus, teljes körű megoldás.
Figyelmeztetés:
A tárfiók kulcsait ne helyezze el kódokban vagy védelem nélküli konfigurációs fájlokban. A tárfiókkulcsok teljes hozzáférést nyújtanak a tárfiókokhoz. A kulcs kiszivárgása helyreállíthatatlan károkat és nagy számlákat eredményezhet. A kiszivárgott kulcsok helyreállításával kapcsolatos tárolási útmutatásért és tanácsért tekintse meg a modul végén található További olvasás című szakaszt.
A Blob Storage-objektummodell inicializálása
A .NET-hez készült Azure Storage SDK-ban a Blob Storage használatának szabványos mintája a következő:
Példányosítson egy új
BlobServiceClient
objektumot, és adja meg a kapcsolati sztring a tárfióknak.A lekéréshez
BlobContainerClient
hívja megGetBlobContainerClient
annak a tárolónak aBlobServiceClient
nevét, amellyel kapcsolatba szeretne lépni vagy létrehozni.
A kódban ezek a lépések így néznek ki.
BlobServiceClient blobServiceClient = new BlobServiceClient(storageConfig.ConnectionString);
BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(storageConfig.FileContainerName);
Az inicializálási kód nem intéz hívásokat a hálózaton keresztül. Ez a tény azt jelenti, hogy néhány, helytelen információ miatt előforduló kivételt csak később dobnak ki. Ha például helytelenül formázott kapcsolati sztring ad meg az BlobServiceClient
osztály konstruktorának, a rendszer azonnal kivételt jelez. Ha azonban a kapcsolati sztring olyan tárfiókra mutat, amely nem létezik, a rendszer kivételt nem tesz, amíg meg nem kísérli a műveletet a tárfiókon.
A Java-hoz készült Azure Storage SDK-ban a Blob Storage használatának szabványos mintája a következő lépésekből áll:
Hozzon létre egy
BlobServiceClient
újBlobServiceClientBuilder
objektumot a tárfiók kapcsolati sztring használatával.BlobContainerClient
Ehhez hívja meg agetBlobContainerClient
metódust annakBlobServiceClient
a tárolónak a nevével, amellyel kapcsolatba szeretne lépni vagy létrehozni.
A kódban ezek a lépések így néznek ki.
BlobServiceClient blobServiceClient = BlobServiceClientBuilder()
.connectionString(connectionString)
.buildClient();
BlobContainerClient containerClient = blobServiceClient.getBlobContainerClient(containerName);
Az inicializálási kód nem intéz hívásokat a hálózaton keresztül. Ez a tény azt jelenti, hogy néhány, helytelen információ miatt előforduló kivételt csak később dobnak ki. Ha például helytelenül formázott kapcsolati sztring ad meg a BlobServiceClientBuilder
rendszer, a rendszer azonnal kivételt jelez. Ha azonban a kapcsolati sztring olyan tárfiókra mutat, amely nem létezik, a rendszer kivételt nem tesz, amíg meg nem kísérli a műveletet a tárfiókon.
Tárolók létrehozása az indításkor
Ha tárolót szeretne létrehozni az alkalmazás indításakor vagy amikor az alkalmazás először megpróbál tárolót használni, hívja fel CreateIfNotExistsAsync
a BlobContainerClient
.
CreateIfNotExistsAsync
nem ad kivételt, ha a tároló már létezik, de hálózati hívást indít az Azure Blob Storage-ba. Csak egyszer érdemes meghívni az inicializálásnál, nem pedig minden alkalommal, amikor használni szeretné a tárolót.
Ha tárolót szeretne létrehozni, amikor az alkalmazás elindul, vagy amikor először megpróbálja használni, hívja meg a tárolót exists
BlobContainerClient
, hogy ellenőrizze, létezik-e már tároló. Ha nem létezik, hívja meg a következőt create
: Csak egyszer érdemes meghívni az inicializálásnál, nem pedig minden alkalommal, amikor használni szeretné a tárolót.
Gyakorlat
A befejezetlen alkalmazás klónozása és felfedezése
Először klónozza a kezdőalkalmazást a GitHubról. A forráskód másolatának lekéréséhez és a szerkesztőben való megnyitásához futtassa a következő parancsokat az Azure Shell parancssori felületén:
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 .
Nyissa meg a szerkesztőben a Controllers/FilesController.cs fájlt. Itt nincs teendő, de gyorsan áttekintheti az alkalmazás működését.
Ez a vezérlő egy API-t implementál három művelettel:
- Index: (
GET /api/Files
) az URL-címek listáját adja vissza, egyet minden feltöltött fájlhoz. Az alkalmazás kezelőfelülete ezt a módszert hívja a feltöltött fájlokra mutató hivatkozások létrehozásához. - Feltöltés: (
POST /api/Files
) megkapja a feltöltött fájlt, és menti azt. - Letöltés: (
GET /api/Files/{filename}
) letölti az egyes fájlokat a neve alapján.
Mindegyik módszer egy
storage
nevűIStorage
-példányt használ a feladathoz. A Kitöltéshez a Models/BlobStorage.cs fájl hiányos implementációjaIStorage
szükséges.- Index: (
A NuGet-csomag hozzáadása
Adjon hozzá egy hivatkozást az Azure Storage SDK-ra. Futtassa a következő parancsokat az Azure Shell CLI-ben:
dotnet add package Azure.Storage.Blobs dotnet restore
Ez a parancs biztosítja, hogy a Blob Storage-ügyfélkódtár legújabb verzióját használja.
Configure
A szükséges konfigurációs értékek a tárfiók kapcsolati sztring és annak a tárolónak a neve, amelyet az alkalmazás a fájlok tárolására használ. Ebben a modulban csak a Azure-alkalmazás Service-ben fogja futtatni az alkalmazást. Kövesse az App Service ajánlott eljárásait, és tárolja az értékeket az App Service alkalmazásbeállításaiban. Ezt az App Service-példány létrehozásakor teheti meg. Jelenleg semmit sem kell tennie.
A konfiguráció használatakor a kezdőalkalmazás tartalmazza a szükséges vízvezetéket. A IOptions<AzureStorageConfig>
konstruktorparaméter két tulajdonsággal BlobStorage
rendelkezik: a tárfiók kapcsolati sztring és annak a tárolónak a neve, amelyet az alkalmazás blobok tárolására használ. Az alkalmazás indításakor van ConfigureServices
egy kód, amely betölti Startup.cs
a konfiguráció értékeit.
Inicializálás
A szerkesztőben nyissa meg a Models/BlobStorage.cs fájlt. A fájl tetején adja hozzá a következő
using
utasításokat, hogy előkészítse a hozzáadni kívánt kódhoz.using Azure; using Azure.Storage.Blobs; using Azure.Storage.Blobs.Models;
Keresse meg a(z)
Initialize
metódust. Az alkalmazás először hívja meg ezt a metódustBlobStorage
. Ha kíváncsi, a Startup.cs webhelyen megnézhetiConfigureServices
, hogyan történik a hívás.A tárolót az
Initialize
részben érdemes létrehozni, ha még nem létezik. Cserélje le a jelenlegi implementációtInitialize
a következő kódra, és mentse a munkáját a CTRL S billentyűkombinációval+.public Task Initialize() { BlobServiceClient blobServiceClient = new BlobServiceClient(storageConfig.ConnectionString); BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(storageConfig.FileContainerName); return containerClient.CreateIfNotExistsAsync(); }
A befejezetlen alkalmazás klónozása és felfedezése
Először klónozza a kezdőalkalmazást a GitHubról. A forráskód másolatának lekéréséhez és a szerkesztőben való megnyitásához futtassa a következő parancsokat az Azure Shell parancssori felületén:
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 .
A szerkesztőben nyissa meg az src/main/java/com/microsoft/azure/samples/jsf/IndexBean.java fájlt. Itt nincs teendő, de gyorsan áttekintheti az alkalmazás működését.
Ez a kérelem hatókörű bean három műveletet valósít meg, amelyeket az src/main/webapp/index.xhtml Java Server Faces (JSF) oldal használ:
- listFileNames: a feltöltött fájlokhoz egy-egy fájlnevet ad vissza. Az index.xhtml oldal meghívja ezt a metódust a feltöltött fájlokra mutató hivatkozások listájának összeállításához.
- feltöltés: egy feltöltött fájlt kap, és menti. A fájl tartalmát és metaadatait a
uploadedFile
JSF-keretrendszer injektálja a tulajdonságba. - letöltés: letölt egy adott fájlt a neve alapján.
A munkájához minden metódus egy úgynevezett
storage
példánytStorage
használ. Az src/main/java/com/microsoft/azure/samples/service/BlobStorage.java fájl hiányos implementációjaStorage
szükséges a kitöltéshez.
Az Azure Storage SDK for Java-referencia hozzáadása
Javasoljuk, hogy az Azure BOM használatával adjon hozzá Azure-ügyfélkódtárakat a projekthez. Egyszerű és elegáns módot kínál több Azure-ügyfélkódtár együttes használatára, miközben minimális függőségi ütközéseket biztosít.
A szerkesztőben nyissa meg a pom.xml fájlt.
Az Azure BOM projekthez való hozzáadásához adja hozzá az alábbi
dependencyManagement
szakaszt azproject
xml-címke alatt.<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>
Az Azure Storage SDK for Java hozzáadásához adja hozzá az alábbiakat
dependency
azproject/dependencies
xml-szakaszhoz.<dependency> <groupId>com.azure</groupId> <artifactId>azure-storage-blob</artifactId> </dependency>
Configure
A szükséges konfigurációs értékek a tárfiók kapcsolati sztring és annak a tárolónak a neve, amelyet az alkalmazás a fájlok tárolására használ. Ebben a modulban csak a Azure-alkalmazás Service-ben fogja futtatni az alkalmazást. Kövesse az App Service ajánlott eljárásait, és tárolja az értékeket az App Service alkalmazásbeállításaiban. Ezt az App Service-példány létrehozásakor teheti meg. Jelenleg semmit sem kell tennie.
A konfiguráció használatakor az App Service alkalmazásbeállításai környezeti változóként lesznek átadva az alkalmazáskódnak. Ezeket az inicializálási kódban olvashatja el.
Inicializálás
A szerkesztőben nyissa meg az src/main/java/com/microsoft/azure/samples/service/BlobStorage.java fájlt. A fájl tetején adja hozzá a következő
import
utasításokat, hogy előkészítse a hozzáadni kívánt kódhoz.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;
Adjon hozzá egy osztálytulajdonságot az
BlobStorage
osztályban aBlobContainerClient
hivatkozás tárolásához.private BlobContainerClient blobContainerClient;
Tipp.
Az Azure-ügyfelek állapot nélküliek és szálbiztosak. A példányok gyorsítótárazása ajánlott, ahol lehetséges. A használt alkalmazás például egyetlen tárolót használ állandó névvel, ezért a legjobb, ha az alkalmazás élettartamának hatókörében gyorsítótárazza.
BlobStorage
@Singleton
ezért a hivatkozás a saját mezőjében való tárolásaBlobContainerClient
javasolt.Keresse meg a
init
módszert széljegyzetekkel@PostConstruct
. Az alkalmazás a példány létrehozása utánBlobStorage
és az első használat előtt hívja meg ezt a metódust.init
Ha még nem létezik, akkor a tárolót itt hozhatja létre. Cserélje le azinit
jelenlegi formáját az alábbi kódra, majd mentse a módosítást.@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(); } }