Cvičení – nahrávání a stahování objektů blob

Dokončeno

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.

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át

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.cs operaci Save ná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.java operaci save následujícím kódem:

    public void save(String name, InputStream inputStream, long contentLength) {
        BlobClient blobClient = blobContainerClient.getBlobClient(name);
        blobClient.upload(inputStream, contentLength);
    }
    

Stažení

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 Load tí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.

  1. 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-string a nastavte název kontejneru na files.

    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 "<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. Nasaďte aplikaci. Následující příkazy pub

    Poznámka:

    Před spuštěním následujících příkazů se ujistěte, že je vaše prostředí 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/start můžete adresář změnit na toto umístění.

    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>"
    

    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.

    Screenshot of the FileUploader web app for C#.

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

  1. V editoru otevřete soubor pom.xml a přidejte do značky build XML následující plugins kó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>
    
  2. 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-stringID az 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="<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
    

    Tip

    Minimální doporučená úroveň pro nasazení reálných aplikací v Javě je jakýkoli plán služby Premium V2.

  3. 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 je vaše prostředí stále 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/start můžete adresář změnit na toto umístění.

    mvn clean package azure-webapp:deploy
    

    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.

    Screenshot of the FileUploader web app for Java.

    Tip

    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.

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