Övning – Uppladdning och nedladdning av blobbar

Slutförd

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 du Save 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 du save 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.

  1. 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 ange files 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
    
  2. 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.

    Screenshot of the FileUploader web app for C#.

  3. 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.

  1. Öppna filen pom.xml i redigeraren och lägg till följande plugins under xml-taggen build .

    <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>
    
  2. 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 med az account showoch 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.

  3. 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.

    Screenshot of the FileUploader web app for Java.

    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.

  4. 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