Gyakorlat – Blob-feltöltések és letöltések
A Blob Storage egyes blobaival való interakcióhoz használjon objektumot BlobClient
. Lekérheti BlobClient
a blob nevét attól a BlobContainerClient
blobtól, amelyben a blob található. BlobClient
metódusokkal rendelkezik az egyes blobok Blob Storage-ban való feltöltésére, letöltésére és kezelésére.
BlobClient-objektum lekérése
Név alapján történő lekéréséhez BlobClient
hívja meg a GetBlobClient
blobot tartalmazó metódusokat BlobContainerClient
a blob nevével. Az BlobClient
objektumok lehetővé teszik a blobok kezelését a blob feltöltésével, letöltésével vagy kezelésével a Blob Storage-ban.
Az adatok a blobokba és blobokból való áthelyezése egy időigényes hálózati folyamat. A .NET-hez készült Azure Storage SDK aszinkron implementációt biztosít minden olyan metódushoz, amely hálózati tevékenységet igényel. Javasoljuk, hogy ezeket az aszinkron implementációkat használja, amikor csak lehetséges az alkalmazásban.
Javasoljuk, hogy nagy adatobjektumok használatakor a memóriában lévő struktúrák, például bájttömbök vagy sztringek helyett használjunk streameket. Ezzel a módszerrel elkerülhető a teljes tartalom pufferelése a memóriában, mielőtt elküldené azt a célnak. Az ASP.NET Core támogatja a streamek kérelmekből és válaszokból való olvasását és írását.
Név alapján történő lekéréséhez BlobClient
hívja meg a getBlobClient
blobot tartalmazó metódusokat BlobContainerClient
a blob nevével. Az BlobClient
objektumok lehetővé teszik a blobok kezelését a blob feltöltésével, letöltésével vagy kezelésével a Blob Storage-ban.
Javasoljuk, hogy nagy adatobjektumok használatakor a memóriában lévő struktúrák, például bájttömbök vagy sztringek helyett használjunk streameket. Ezzel a módszerrel elkerülhető a teljes tartalom pufferelése a memóriában, mielőtt elküldené azt a célnak.
Új blobok létrehozása
Egy új blob létrehozásához az Upload
metódusok egyikét kell meghívni egy nem létező blobra hivatkozva. Ez a megközelítés két dolgot tesz: létrehozza a blobot a tárolóban, és feltölti az adatokat.
BlobClient blobClient = containerClient.GetBlobClient(name);
var response = blobClient.UploadAsync(fileStream);
Egy új blob létrehozásához az upload
metódusok egyikét kell meghívni egy nem létező blobra hivatkozva. Ez a megközelítés két dolgot tesz: létrehozza a blobot a tárolóban, és feltölti az adatokat.
BlobClient blobClient = blobContainerClient.getBlobClient(name);
blobClient.upload(inputStream, contentLength);
Gyakorlat
Fejezze be az alkalmazást a feltöltési és letöltési kód hozzáadásával, majd telepítse a Azure-alkalmazás Service-ben tesztelés céljából.
Upload
Blob feltöltéséhez implementálja a metódust BlobStorage.Save
. Először egy BlobClient
olyan objektumot kap, amely a blobot jelöli egy hívássalBlobContainerClient
GetBlobClient
. Ezután a UploadAsync
metódus BlobClient
használatával mentse a Stream
metódusnak átadott adatokat a Blob Storage-ba.
A szerkesztőben cserélje le a
Save
BlobStorage.cs
részét az alábbi kódra. A CTRL S billentyűkombinációval+ mentheti a munkáját.public Task Save(Stream fileStream, string name) { BlobServiceClient blobServiceClient = new BlobServiceClient(storageConfig.ConnectionString); // Get the container (folder) the file will be saved in BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(storageConfig.FileContainerName); // Get the Blob Client used to interact with (including create) the blob BlobClient blobClient = containerClient.GetBlobClient(name); // Upload the blob return blobClient.UploadAsync(fileStream); }
Megjegyzés:
Az itt látható streamalapú feltöltési kód hatékonyabb, mint a fájl bájttömbbe való beolvasása, mielőtt elküldené a Blob Storage-ba. A fájl ügyfélből való lekéréséhez használt ASP.NET Core-technika
IFormFile
azonban nem valódi, végpontok közötti streamelési implementáció. Csak kis méretű fájlok feltöltésének kezelésére alkalmas.
Blob feltöltéséhez implementálja a metódust BlobStorage.save
. Először egy BlobClient
olyan objektumot kap, amely a blobot jelöli egy hívássalBlobContainerClient
getBlobClient
. Ezután a upload
metódus BlobClient
használatával mentse a InputStream
metódusnak átadott adatokat a Blob Storage-ba.
A szerkesztőben cserélje le a
save
BlobStorage.java
részét az alábbi kódra.public void save(String name, InputStream inputStream, long contentLength) { BlobClient blobClient = blobContainerClient.getBlobClient(name); blobClient.upload(inputStream, contentLength); }
Letöltés
Fájl letöltéséhez a rendszer visszaadja az OpenReadAsync
objektum metódusát BlobClient
. Ez a metódus egy Stream
értéket ad vissza, ami azt jelenti, hogy a kódnak nem kell egyszerre betöltenie az összes bájtot a Blob Storage-ból. Csak vissza kell adnia egy hivatkozást a blobstreamre, amelyet ASP.NET Core használhat a fájl böngészőbe való streameléséhez.
Cserélje le
Load
ezt a kódot, és mentse a munkáját a CTRL + S billentyűkombinációval.public Task<Stream> Load(string name) { BlobServiceClient blobServiceClient = new BlobServiceClient(storageConfig.ConnectionString); // Get the container the blobs are saved in BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(storageConfig.FileContainerName); // Get a client to operate on the blob so we can read it. BlobClient blobClient = containerClient.GetBlobClient(name); return blobClient.OpenReadAsync(); }
Fájl letöltéséhez használja a metódust openInputStream
a következőn: .BlobClient> Ez a metódus egy InputStream
olyan értéket ad vissza, amely azt jelenti, hogy a kódnak nem kell egyszerre betöltenie az összes bájtot a Blob Storage-ból. Csak vissza kell adnia egy hivatkozást a blobstreamre, amellyel IndexBean
a tartalmat a böngészőbe streamelheti.
A read
helyére írja az alábbi kódot, és mentse a munkáját.
public InputStream read(String name) {
BlobClient blobClient = blobContainerClient.getBlobClient(name);
return blobClient.openInputStream();
}
Üzembe helyezés és futtatás az Azure-ban
Az alkalmazás befejeződött. Üzembe helyezheti, és láthatja, hogy működik.
Hozzon létre egy App Service-alkalmazást, és konfigurálja megfelelő alkalmazásbeállításokkal a tárfiók kapcsolati sztringjével és tárolónevével. A tárfiók kapcsolati sztringjét az
az storage account show-connection-string
paranccsal kérheti le, a tároló nevét pedig állítsafiles
értékre.Az alkalmazás nevének globálisan egyedinek kell lennie. Válassza ki a saját nevét a kitöltéshez
<your-unique-app-name>
. Használja a korábban létrehozott tárfióknevet a lecseréléséhez<your-unique-storage-account-name>
. Futtassa az alábbi parancsok mindegyikét sorrendben az Azure CLI-ben:az appservice plan create \ --name blob-exercise-plan \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --sku FREE --location eastus
az webapp create \ --name <your-unique-app-name> \ --plan blob-exercise-plan \ --resource-group "<rgn>[sandbox resource group name]</rgn>"
CONNECTIONSTRING=$(az storage account show-connection-string \ --name <your-unique-storage-account-name> \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --output tsv)
az webapp config appsettings set \ --name <your-unique-app-name> --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --settings AzureStorageConfig:ConnectionString=$CONNECTIONSTRING AzureStorageConfig:FileContainerName=files
Az alkalmazás üzembe helyezése. Az alábbi parancsok közzéteszik a webhelyet a pub mappájában, becsomagolja a site.zip fájlba, és üzembe helyezik a zip-et az App Service-ben.
Megjegyzés:
Az alábbi parancsok futtatása előtt győződjön meg arról, hogy a rendszerhéj továbbra is az mslearn-store-data-in-azure/store-app-data-with-azure-blob-storage/src/start könyvtárban van. A
cd mslearn-store-data-in-azure/store-app-data-with-azure-blob-storage/src/start
parancs használatával átválthat erre a könyvtárra.dotnet publish -o pub cd pub zip -r ../site.zip *
az webapp deployment source config-zip \ --src ../site.zip \ --name <your-unique-app-name> \ --resource-group "<rgn>[sandbox resource group name]</rgn>"
Nyissa meg a
https://<your-unique-app-name>.azurewebsites.net
webhelyet egy böngészőben, hogy láthassa a futó alkalmazást. A következő képhez hasonlóan kell kinéznie.Az alkalmazás teszteléséhez próbáljon meg néhány fájlt feltölteni és letölteni. Miután feltöltött néhány fájlt, a tárolóban lévő blobok megtekintéséhez futtassa a következő kódot a rendszerhéjban. Cserélje le
<your-unique-storage-account-name>
a modulban korábban létrehozott tárfiók nevére:az storage blob list --account-name <your-unique-storage-account-name> --container-name files --query [].{Name:name} --output table
Az alkalmazás befejeződött. Üzembe helyezheti, és láthatja, hogy működik. App Service-alkalmazás létrehozásához, konfigurálásához és üzembe helyezéséhez használja a Azure-alkalmazás Service Maven beépülő modulját.
A szerkesztőben nyissa meg a pom.xml fájlt, és adja hozzá a következőt
plugins
azbuild
xml címke alatt.<plugins> <plugin> <groupId>com.microsoft.azure</groupId> <artifactId>azure-webapp-maven-plugin</artifactId> <version>2.3.0</version> <configuration> <schemaVersion>v2</schemaVersion> <subscriptionId>${env.AZ_SUBSCRIPTION_ID}</subscriptionId> <resourceGroup>${env.AZ_RESOURCE_GROUP}</resourceGroup> <appName>${env.AZ_APP_NAME}</appName> <pricingTier>${env.AZ_PRICING_TIER}</pricingTier> <region>${env.AZ_REGION}</region> <runtime> <os>Linux</os> <javaVersion>Java 11</javaVersion> <webContainer>Tomcat 9.0</webContainer> </runtime> <deployment> <resources> <resource> <directory>${project.basedir}/target</directory> <includes> <include>*.war</include> </includes> </resource> </resources> </deployment> <appSettings> <property> <name>STORAGE_CONNECTION_STRING</name> <value>${env.AZ_STORAGE_CONNECTION_STRING}</value> </property> <property> <name>STORAGE_CONTAINER_NAME</name> <value>${env.AZ_STORAGE_CONTAINER_NAME}</value> </property> </appSettings> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.3.2</version> </plugin> </plugins>
Az alábbi parancsok előkészítik a környezeti változókat a Maven beépülő modulhoz Azure-alkalmazás szolgáltatáshoz. Bontsa ki a tárfiók kapcsolati sztring
az storage account show-connection-string
, az előfizetés azonosítóját a régióvalaz account show
, a díjszabást, a tárolónevet és az alkalmazásnevet. Az alkalmazás nevének globálisan egyedinek kell lennie. Válassza ki a saját nevét a kitöltéshez<your-unique-app-name>
.export AZ_SUBSCRIPTION_ID=$(az account show --query id --output tsv) export AZ_RESOURCE_GROUP="<rgn>[sandbox resource group name]</rgn>" export AZ_REGION=eastus export AZ_APP_NAME=<your-unique-app-name> export AZ_PRICING_TIER=F1 export AZ_STORAGE_CONNECTION_STRING=$(az storage account show-connection-string --name <your-unique-storage-account-name> --output tsv) export AZ_STORAGE_CONTAINER_NAME=files
Tipp.
A valós Java-alkalmazások üzembe helyezéséhez ajánlott minimális szint bármely Prémium V2 szolgáltatáscsomag.
Az alkalmazás üzembe helyezése. Az alábbi parancs létrehozza az alkalmazást a ROOT.war fájlba, és üzembe helyezi a WAR-fájlt az App Service-ben. A Azure-alkalmazás Szolgáltatás Maven beépülő modulja az első üzembe helyezési kísérlet során helyezi üzembe az erőforrásokat.
Megjegyzés:
Az alábbi parancsok futtatása előtt győződjön meg arról, hogy a rendszerhéj továbbra is az mslearn-store-data-in-azure/store-java-ee-application-data-with-azure-blob-storage/start könyvtárban van. A
cd mslearn-store-data-in-azure/store-java-ee-application-data-with-azure-blob-storage/start
parancs használatával átválthat erre a könyvtárra.mvn clean package azure-webapp:deploy
Nyissa meg a
https://<your-unique-app-name>.azurewebsites.net
webhelyet egy böngészőben, hogy láthassa a futó alkalmazást. A következő képhez hasonlóan kell kinéznie.Tipp.
Ez a modul a Maven beépülő modult használja Azure-alkalmazás Service-hez az alkalmazás tomcat 9-en való üzembe helyezéséhez Azure-alkalmazás Szolgáltatáson. További lehetőségekről a modul végén található További olvasás című szakaszban olvashat.
Az alkalmazás teszteléséhez próbáljon meg néhány fájlt feltölteni és letölteni. Miután feltöltött néhány fájlt, a tárolóban lévő blobok megtekintéséhez futtassa a következő kódot a rendszerhéjban.
az storage blob list --account-name <your-unique-storage-account-name> --container-name files --query [].{Name:name} --output table