Cvičení – nahrávání a stahování objektů blob
K interakci s jednotlivými objekty blob ve službě Blob Storage použijte BlobClient objekt. Můžete ho získat BlobClient tak, že ho požádáte o název objektu blob z umístění objektu BlobContainerClient blob.
BlobClient obsahuje metody pro nahrávání, stahování a správu jednotlivých objektů blob ve službě Blob Storage.
Poznámka:
Toto cvičení je volitelné. Pokud chcete absolvovat toto cvičení, budete muset před zahájením vytvořit předplatné Azure. Pokud nemáte účet Azure nebo ho v tuto chvíli nechcete vytvořit, můžete si přečíst pokyny, abyste porozuměli zobrazeným informacím.
Poznámka:
V této lekci použijete Azure Cloud Shell jako terminál. Ke Cloud Shellu se dostanete prostřednictvím webu Azure Portal nebo přihlášení ke Cloud Shellu. Abyste ho mohli používat, nemusíte na počítači ani přenosném počítači nic instalovat.
Poznámka:
V tomto cvičení nahraďte myResourceGroupName v příkladech názvem existující skupiny prostředků nebo názvem skupiny prostředků, kterou jste vytvořili pro toto cvičení.
Získání objektu BlobClient
Pokud chcete získat BlobClient hodnotu podle názvu, zavolejte GetBlobClient metody BlobContainerClient , které obsahují objekt blob, pomocí názvu objektu blob. Objekt BlobClient umožňuje interakci s objektem blob nahráním, stažením nebo správou objektu blob ve službě Blob Storage.
Přesun dat do a z objektů blob je síťová operace, která nějakou dobu trvá. Sada Azure Storage SDK pro .NET poskytuje asynchronní implementaci všech metod, které vyžadují síťovou aktivitu. Tyto asynchronní implementace doporučujeme používat, kdykoli je to možné ve vaší aplikaci.
Při práci s velkými datovými objekty doporučujeme používat datové proudy místo struktur v paměti, jako jsou pole bajtů nebo řetězce. Tento přístup zabraňuje ukládání celého obsahu do vyrovnávací paměti před odesláním do cíle. ASP.NET Core podporuje čtení a zápis datových proudů z požadavků a odpovědí.
Pokud chcete získat BlobClient hodnotu podle názvu, zavolejte getBlobClient metody BlobContainerClient , které obsahují objekt blob, pomocí názvu objektu blob. Objekt BlobClient umožňuje interakci s objektem blob nahráním, stažením nebo správou objektu blob ve službě Blob Storage.
Při práci s velkými datovými objekty doporučujeme používat datové proudy místo struktur v paměti, jako jsou pole bajtů nebo řetězce. Tento přístup zabraňuje ukládání celého obsahu do vyrovnávací paměti před odesláním do cíle.
Vytváření nových objektů blob
Pokud chcete vytvořit nový objekt blob, zavolejte jednu z metod Upload v odkazu na objekt blob, který v úložišti neexistuje. Tento přístup dělá dvě věci: vytvoří objekt blob v úložišti a nahraje data.
BlobClient blobClient = containerClient.GetBlobClient(name);
var response = blobClient.UploadAsync(fileStream);
Pokud chcete vytvořit nový objekt blob, zavolejte jednu z metod upload v odkazu na objekt blob, který v úložišti neexistuje. Tento přístup dělá dvě věci: vytvoří objekt blob v úložišti a nahraje data.
BlobClient blobClient = blobContainerClient.getBlobClient(name);
blobClient.upload(inputStream, contentLength);
Cvičení
Dokončete aplikaci tak, že přidáte kód pro nahrání a stažení a pak ji nasadíte do služby Aplikace Azure Service pro účely testování.
Nahrávání
K nahrání objektu blob implementujete metodu BlobStorage.Save . Nejprve získáte BlobClient objekt, který představuje objekt blob voláním GetBlobClient objektu BlobContainerClient. Pak použijte metodu UploadAsyncBlobClient na kartě k uložení Stream dat předaných této metodě do služby Blob Storage.
V editoru nahraďte v souboru
BlobStorage.csoperaciSavenásledujícím kódem: K uložení práce použijte klávesu CTRL+S .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); }Poznámka:
Zde zobrazený kód pro nahrání na základě streamu je efektivnější než čtení souboru do pole bajtů před odesláním do služby Blob Storage. Technika ASP.NET Core
IFormFile, kterou používáte k získání souboru z klienta, ale není skutečnou kompletní implementací streamování. Je vhodné pouze pro zpracování nahrávání malých souborů.
K nahrání objektu blob implementujete metodu BlobStorage.save . Nejprve získáte BlobClient objekt, který představuje objekt blob voláním getBlobClient objektu BlobContainerClient. Pak použijte metodu uploadBlobClient na kartě k uložení InputStream dat předaných této metodě do služby Blob Storage.
V editoru nahraďte v souboru
BlobStorage.javaoperacisavenásledujícím kódem:public void save(String name, InputStream inputStream, long contentLength) { BlobClient blobClient = blobContainerClient.getBlobClient(name); blobClient.upload(inputStream, contentLength); }
Stáhnout
Chcete-li stáhnout soubor, OpenReadAsync vrátí se metoda objektu BlobClient . Tato metoda vrátí Streamhodnotu , což znamená, že váš kód nemusí načítat všechny bajty ze služby Blob Storage najednou. Stačí vrátit odkaz na datový proud objektů blob, který ASP.NET Core může použít k streamování souboru do prohlížeče.
Nahraďte
Loadtímto kódem a uložte svoji práci pomocí kombinace kláves CTRL+S.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(); }
Chcete-li stáhnout soubor, použijte metodu openInputStream na .BlobClient Tato metoda vrátí InputStreamhodnotu , což znamená, že váš kód nemusí načítat všechny bajty ze služby Blob Storage najednou. Stačí vrátit odkaz na stream objektů blob, který IndexBean může použít ke streamování obsahu do prohlížeče.
Operaci read nahraďte tímto kódem a práci uložte.
public InputStream read(String name) {
BlobClient blobClient = blobContainerClient.getBlobClient(name);
return blobClient.openInputStream();
}
Nasazení a spuštění v Azure
Vaše aplikace je hotová. Nasaďte ho a podívejte se, jak funguje.
Vytvořte aplikaci App Service a nakonfigurujte ji nastavením aplikace na připojovací řetězec účtu úložiště a název kontejneru. Získejte připojovací řetězec účtu úložiště pomocí
az storage account show-connection-stringa nastavte název kontejneru nafiles.Název aplikace musí být globálně jedinečný. Zvolte vlastní jméno, které chcete vyplnit
<your-unique-app-name>. K nahrazení<your-unique-storage-account-name>použijte název účtu úložiště, který jste vytvořili dříve. V Azure CLI spusťte každý z následujících příkazů v pořadí:az appservice plan create \ --name blob-exercise-plan \ --resource-group "myResourceGroupName" \ --sku FREE --location eastusaz webapp create \ --name <your-unique-app-name> \ --plan blob-exercise-plan \ --resource-group "myResourceGroupName"CONNECTIONSTRING=$(az storage account show-connection-string \ --name <your-unique-storage-account-name> \ --resource-group "myResourceGroupName" \ --output tsv)az webapp config appsettings set \ --name <your-unique-app-name> --resource-group "myResourceGroupName" \ --settings AzureStorageConfig:ConnectionString=$CONNECTIONSTRING AzureStorageConfig:FileContainerName=filesNasaďte aplikaci. Následující příkazy pub site.zip pub
Poznámka:
Před spuštěním následujících příkazů se ujistěte, že váš příkazový řádek je stále v adresáři mslearn-store-data-in-azure/store-app-data-with-azure-blob-storage/src/start. Zadáním
cd mslearn-store-data-in-azure/store-app-data-with-azure-blob-storage/src/startmůžete adresář změnit na toto umístění.dotnet publish -o pub cd pub zip -r ../site.zip *az webapp deploy \ --src-path ../site.zip \ --resource-group "myResourceGroupName" \ --name <your-unique-app-name>Pokud si chcete prohlédnout spuštěnou aplikaci, otevřete v prohlížeči
https://<your-unique-app-name>.azurewebsites.net. Vaše zadání by mělo vypadat jako na následujícím obrázku.
Otestujte aplikaci tak, že zkusíte nahrát a stáhnout nějaké soubory. Po nahrání několika souborů spusťte v kontejneru objekty blob následující kód. Nahraďte
<your-unique-storage-account-name>názvem účtu úložiště, který jste vytvořili dříve v modulu:az storage blob list --account-name <your-unique-storage-account-name> --container-name files --query [].{Name:name} --output table
Vaše aplikace je hotová. Nasaďte ho a podívejte se, jak funguje. Pomocí modulu plug-in Maven pro Aplikace Azure Service vytvořte aplikaci App Service, nakonfigurujte ji a nasaďte.
V editoru otevřete soubor pom.xml a do značky XML přidejte následující
pluginsbuildkód.<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>Následující příkazy připraví proměnné prostředí pro modul plug-in Maven pro službu Aplikace Azure Service. Extrahujte připojovací řetězec účtu úložiště s
az storage account show-connection-stringIDaz account showpředplatného a nastavte oblast, ceny, název kontejneru a název aplikace. Název aplikace musí být globálně jedinečný. Zvolte vlastní jméno, které chcete vyplnit<your-unique-app-name>.export AZ_SUBSCRIPTION_ID=$(az account show --query id --output tsv) export AZ_RESOURCE_GROUP="myResourceGroupName" 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=filesNávod
Minimální doporučená úroveň pro nasazení reálných aplikací v Javě je jakýkoli plán služby Premium V2.
Nasaďte aplikaci. Následující příkaz sestaví aplikaci do ROOT.war a nasadí soubor WAR do služby App Service. Modul plug-in Maven pro Aplikace Azure Service zřizuje prostředky při prvním pokusu o nasazení.
Poznámka:
Před spuštěním následujících příkazů se ujistěte, že se váš shell stále nachází v adresáři mslearn-store-data-in-azure/store-java-ee-application-data-with-azure-blob-storage/start. Zadáním
cd mslearn-store-data-in-azure/store-java-ee-application-data-with-azure-blob-storage/startmůžete adresář změnit na toto umístění.mvn clean package azure-webapp:deployPokud si chcete prohlédnout spuštěnou aplikaci, otevřete v prohlížeči
https://<your-unique-app-name>.azurewebsites.net. Vaše zadání by mělo vypadat jako na následujícím obrázku.
Návod
Tento modul používá modul plug-in Maven pro Aplikace Azure Service k nasazení aplikace na Tomcat 9 ve službě Aplikace Azure Service. Další informace o dalších možnostech najdete v části Další čtení na konci tohoto modulu.
Otestujte aplikaci tak, že zkusíte nahrát a stáhnout nějaké soubory. Po nahrání několika souborů spusťte v kontejneru objekty blob následující kód.
az storage blob list --account-name <your-unique-storage-account-name> --container-name files --query [].{Name:name} --output table