Övning – Uppladdning och nedladdning av blobbar
Om du vill interagera med enskilda blobar i Blob Storage använder du ett BlobClient
objekt. Du kan hämta en BlobClient
genom att begära den med blobens namn från den BlobContainerClient
plats där bloben finns. BlobClient
har metoder för att ladda upp, ladda ned och hantera enskilda blobar i Blob Storage.
Hämta ett BlobClient-objekt
Om du vill hämta ett BlobClient
efter namn anropar GetBlobClient
du metoderna på som BlobContainerClient
innehåller bloben med hjälp av namnet på bloben. Med ett BlobClient
objekt kan du interagera med bloben genom att ladda upp, ladda ned eller hantera bloben i Blob Storage.
Att flytta data till och från en blob är en nätverksåtgärd som tar tid. Azure Storage SDK för .NET tillhandahåller asynkron implementering av alla metoder som kräver nätverksaktivitet. Vi rekommenderar att du använder dessa asynkrona implementeringar när det är möjligt i ditt program.
Vi rekommenderar att du använder strömmar i stället för minnesinterna strukturer som bytematriser eller strängar när du arbetar med stora dataobjekt. Den här metoden undviker buffring av det fullständiga innehållet i minnet innan det skickas till målet. ASP.NET Core har stöd för läsning och skrivning av strömmar från begäranden och svar.
Om du vill hämta ett BlobClient
efter namn anropar getBlobClient
du metoderna på som BlobContainerClient
innehåller bloben med hjälp av namnet på bloben. Med ett BlobClient
objekt kan du interagera med bloben genom att ladda upp, ladda ned eller hantera bloben i Blob Storage.
Vi rekommenderar att du använder strömmar i stället för minnesinterna strukturer som bytematriser eller strängar när du arbetar med stora dataobjekt. Den här metoden undviker buffring av det fullständiga innehållet i minnet innan det skickas till målet.
Skapa nya blobbar
Om du vill skapa en ny blob anropar du en av Upload
-metoderna för att få en referens till en blob som inte finns i lagringen. Den här metoden gör två saker: skapar bloben i lagringen och laddar upp data.
BlobClient blobClient = containerClient.GetBlobClient(name);
var response = blobClient.UploadAsync(fileStream);
Om du vill skapa en ny blob anropar du en av upload
-metoderna för att få en referens till en blob som inte finns i lagringen. Den här metoden gör två saker: skapar bloben i lagringen och laddar upp data.
BlobClient blobClient = blobContainerClient.getBlobClient(name);
blobClient.upload(inputStream, contentLength);
Övning
Slutför appen genom att lägga till uppladdnings- och nedladdningskoden och distribuera den sedan till Azure App Service för testning.
Överföring
Om du vill ladda upp en blob implementerar BlobStorage.Save
du metoden. Först får du ett BlobClient
objekt som representerar bloben genom att anropa GetBlobClient
på en BlobContainerClient
. UploadAsync
Använd sedan metoden på BlobClient
för att spara data som Stream
skickas till den här metoden upp till Blob Storage.
I redigeringsprogrammet i
BlobStorage.cs
ersätter duSave
med följande kod. Använd CTRL+S för att spara ditt arbete.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); }
Kommentar
Den strömbaserade uppladdningskoden som visas här är effektivare än att läsa filen i en bytematris innan den skickas till Blob Storage. Den ASP.NET Core-teknik
IFormFile
som du använder för att hämta filen från klienten är dock inte en sann implementering av direktuppspelning från slutpunkt till slutpunkt. Det är bara lämpligt att hantera uppladdningar av små filer.
Om du vill ladda upp en blob implementerar BlobStorage.save
du metoden. Först får du ett BlobClient
objekt som representerar bloben genom att anropa getBlobClient
på en BlobContainerClient
. upload
Använd sedan metoden på BlobClient
för att spara data som InputStream
skickas till den här metoden upp till Blob Storage.
I redigeringsprogrammet i
BlobStorage.java
ersätter dusave
med följande kod.public void save(String name, InputStream inputStream, long contentLength) { BlobClient blobClient = blobContainerClient.getBlobClient(name); blobClient.upload(inputStream, contentLength); }
Ladda ned
Om du vill ladda ned en fil OpenReadAsync
returneras -metoden för BlobClient
objektet. Den här metoden returnerar en Stream
, vilket innebär att koden inte behöver läsa in alla byte från Blob Storage på en gång. Du behöver bara returnera en referens till blobströmmen, som ASP.NET Core kan använda för att strömma filen till webbläsaren.
Ersätt
Load
med den här koden och spara ditt arbete med 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(); }
Om du vill ladda ned en fil använder du openInputStream
-metoden på BlobClient
. Den här metoden returnerar en InputStream
, vilket innebär att koden inte behöver läsa in alla byte från Blob Storage på en gång. Du behöver bara returnera en referens till blobströmmen, som IndexBean
kan användas för att strömma innehållet till webbläsaren.
Ersätt read
med den här koden och spara ditt arbete.
public InputStream read(String name) {
BlobClient blobClient = blobContainerClient.getBlobClient(name);
return blobClient.openInputStream();
}
Distribuera och köra i Azure
Appen är klar. Distribuera den och se hur den fungerar.
Skapa en App Service-app och konfigurera den med appinställningar för lagringskontots anslutningssträng och containernamn. Hämta lagringskontots anslutningssträng med
az storage account show-connection-string
och angefiles
som namn på containern.Appnamnet måste vara globalt unikt. Välj ditt eget namn för att fylla i
<your-unique-app-name>
. Använd lagringskontonamnet som du skapade tidigare för att ersätta<your-unique-storage-account-name>
. Kör vart och ett av följande kommandon i ordning i Azure CLI: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
Distribuera din app. Följande kommandon publicerar webbplatsen till pubmappen, zippar upp den i site.zip och distribuerar zip-filen till App Service.
Kommentar
Kontrollera att gränssnittet fortfarande finns i katalogen mslearn-store-data-in-azure/store-app-data-with-azure-blob-storage/src/start innan du kör följande kommandon. Du kan använda
cd mslearn-store-data-in-azure/store-app-data-with-azure-blob-storage/src/start
för att ändra katalogen till den här platsen.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>"
Öppna
https://<your-unique-app-name>.azurewebsites.net
i en webbläsare om du vill se appen som körs. Det bör se ut som följande bild.Prova att ladda upp och ladda ned några filer om du vill testa appen. När du har laddat upp några filer kör du följande kod i gränssnittet för att se blobarna i containern. Ersätt
<your-unique-storage-account-name>
med namnet på lagringskontot som du skapade tidigare i modulen:az storage blob list --account-name <your-unique-storage-account-name> --container-name files --query [].{Name:name} --output table
Appen är klar. Distribuera den och se hur den fungerar. Använd Plugin-programmet Maven för Azure App Service för att skapa en App Service-app, konfigurera den och distribuera den.
Öppna filen pom.xml i redigeraren och lägg till följande
plugins
under xml-taggenbuild
.<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>
Följande kommandon förbereder miljövariabler för Maven-pluginprogrammet för Azure App Service. Extrahera lagringskontots anslutningssträng med
az storage account show-connection-string
, prenumerations-ID:t medaz account show
och ange region, prissättning, containernamn och appnamn. Appnamnet måste vara globalt unikt. Välj ditt eget namn för att fylla i<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
Dricks
Den lägsta rekommenderade nivån för att distribuera verkliga Java-program är en Premium V2-tjänstplan.
Distribuera din app. Följande kommando skapar appen i ROOT.war och distribuerar WAR-filen till App Service. Maven-plugin-programmet för Azure App Service etablerar resurser vid det första distributionsförsöket.
Kommentar
Kontrollera att gränssnittet fortfarande finns i katalogen mslearn-store-data-in-azure/store-java-ee-application-data-with-azure-blob-storage/start innan du kör följande kommandon. Du kan använda
cd mslearn-store-data-in-azure/store-java-ee-application-data-with-azure-blob-storage/start
för att ändra katalogen till den här platsen.mvn clean package azure-webapp:deploy
Öppna
https://<your-unique-app-name>.azurewebsites.net
i en webbläsare om du vill se appen som körs. Det bör se ut som följande bild.Dricks
Den här modulen använder Maven-plugin-programmet för Azure App Service för att distribuera appen på Tomcat 9 i Azure App Service. Mer information om andra alternativ finns i avsnittet Ytterligare läsning i slutet av den här modulen.
Prova att ladda upp och ladda ned några filer om du vill testa appen. När du har laddat upp några filer kör du följande kod i gränssnittet för att se blobarna i containern.
az storage blob list --account-name <your-unique-storage-account-name> --container-name files --query [].{Name:name} --output table