Gyakorlat – Blob-feltöltések és letöltések

Befejeződött

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ássalBlobContainerClientGetBlobClient. 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 SaveBlobStorage.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ássalBlobContainerClientgetBlobClient. 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 saveBlobStorage.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 InputStreamolyan é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.

  1. 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ítsa files é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
    
  2. 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.

    Screenshot of the FileUploader web app for C#.

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

  1. A szerkesztőben nyissa meg a pom.xml fájlt, és adja hozzá a következőt plugins az build 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>
    
  2. 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 sztringaz 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.

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

    Screenshot of the FileUploader web app for Java.

    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.

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