Alıştırma - Blob karşıya yüklemeleri ve indirmeleri

Tamamlandı

Blob Depolama tek tek bloblarla etkileşim kurmak için bir BlobClient nesne kullanın. Blobu, blob'un bulunduğu konumdan BlobContainerClient blob'un adıyla isteyerek alabilirsinizBlobClient. BlobClientBlob Depolama tek tek blobları karşıya yükleme, indirme ve yönetme yöntemlerine sahiptir.

BlobClient nesnesi alma

Bir ada göre almak BlobClient için blobun GetBlobClient adını kullanarak blobu içeren yöntemleri BlobContainerClient çağırın. NesneBlobClient, Blob Depolama blobu karşıya yükleyerek, indirerek veya yöneterek blobla etkileşim kurmanızı sağlar.

Verilerin bloba ve bloblardan taşınması zaman alan bir ağ işlemidir. .NET için Azure Depolama SDK'sı, ağ etkinliği gerektiren tüm yöntemlerin zaman uyumsuz uygulanmasını sağlar. Bu zaman uyumsuz uygulamaları uygulamanızda mümkün olduğunca kullanmanızı öneririz.

Büyük veri nesneleriyle çalışırken bayt dizileri veya dizeler gibi bellek içi yapılar yerine akışları kullanmanızı öneririz. Bu yaklaşım, hedefe göndermeden önce tam içeriğin bellekte arabelleğe alınmasını önler. ASP.NET Core, isteklerden ve yanıtlardan akışların okunup yazılmasını destekler.

Bir ada göre almak BlobClient için blobun getBlobClient adını kullanarak blobu içeren yöntemleri BlobContainerClient çağırın. NesneBlobClient, Blob Depolama blobu karşıya yükleyerek, indirerek veya yöneterek blobla etkileşim kurmanızı sağlar.

Büyük veri nesneleriyle çalışırken bayt dizileri veya dizeler gibi bellek içi yapılar yerine akışları kullanmanızı öneririz. Bu yaklaşım, hedefe göndermeden önce tam içeriğin bellekte arabelleğe alınmasını önler.

Yeni bloblar oluşturma

Yeni blob oluşturmak için, depolamada var olmayan bir blobun başvurusunda Upload yöntemlerinden birini çağırın. Bu yaklaşım iki şey yapar: blobu depolamada oluşturur ve verileri karşıya yükler.

BlobClient blobClient = containerClient.GetBlobClient(name);

var response = blobClient.UploadAsync(fileStream);

Yeni blob oluşturmak için, depolamada var olmayan bir blobun başvurusunda upload yöntemlerinden birini çağırın. Bu yaklaşım iki şey yapar: blobu depolama alanında oluşturur ve verileri karşıya yükler.

BlobClient blobClient = blobContainerClient.getBlobClient(name);
blobClient.upload(inputStream, contentLength);

Alıştırma

Karşıya yükleme ve indirme kodunu ekleyerek uygulamanızı tamamlayın, ardından test için Azure Uygulaması Hizmeti'ne dağıtın.

Karşıya Yükle

Blobu karşıya yüklemek için yöntemini uygularsınız BlobStorage.Save . İlk olarak, üzerinde BlobClient çağrısı GetBlobClient yaparak blobu temsil eden bir BlobContainerClientnesne alırsınız. Ardından, bu yönteme geçirilen verilerin Blob Depolama'a kaydedilmesi Stream için üzerindeki yöntemini BlobClient kullanınUploadAsync.

  • Düzenleyicide BlobStorage.cs dosyasındaki Save öğesini aşağıdaki kodla değiştirin. Çalışmanızı kaydetmek için CTRL+S kullanın.

    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);
    }
    

    Dekont

    Burada gösterilen akış tabanlı karşıya yükleme kodu, dosyayı Blob Depolama göndermeden önce bayt dizisine okumaktan daha verimlidir. Ancak, istemciden dosyayı almak için kullandığınız ASP.NET Core IFormFile tekniği gerçek bir uçtan uca akış uygulaması değildir. Yalnızca küçük dosyaların karşıya yüklemelerini işlemek için uygundur.

Blobu karşıya yüklemek için yöntemini uygularsınız BlobStorage.save . İlk olarak, üzerinde BlobClient çağrısı getBlobClient yaparak blobu temsil eden bir BlobContainerClientnesne alırsınız. Ardından, bu yönteme geçirilen verilerin Blob Depolama'a kaydedilmesi InputStream için üzerindeki yöntemini BlobClient kullanınupload.

  • Düzenleyicide BlobStorage.java dosyasındaki save öğesini aşağıdaki kodla değiştirin.

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

İndir

Bir dosyayı indirmek için nesnedeki OpenReadAsync BlobClient yöntemi döndürülür. Bu yöntem bir Streamdöndürür. Bu, kodunuzun Blob Depolama tüm baytları aynı anda yüklemesine gerek olmadığı anlamına gelir. ASP.NET Core'un dosyayı tarayıcıya akışla aktarabilmesi için blob akışına bir başvuru döndürmeniz yeterlidir.

  • değerini bu kodla değiştirin Load ve CTRL + S tuşlarını kullanarak çalışmanızı kaydedin.

    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();
    }
    

Bir dosyayı indirmek için üzerindeki BlobClientyöntemini kullanınopenInputStream. Bu yöntem bir InputStreamdöndürür. Bu, kodunuzun Blob Depolama tüm baytları aynı anda yüklemesine gerek olmadığı anlamına gelir. Yalnızca blob akışına bir başvuru döndürmeniz yeterlidir. Bu IndexBean başvuruyu kullanarak içeriği tarayıcıya akışla aktarabilirsiniz.

read öğesini bu kodla değiştirin ve çalışmanızı kaydedin.

public InputStream read(String name) {
    BlobClient blobClient = blobContainerClient.getBlobClient(name);
    return blobClient.openInputStream();
}

Azure’da dağıtma ve çalıştırma

Uygulamanız tamamlandı. Dağıtın ve çalıştığını görün.

  1. Bir App Service uygulaması oluşturun ve bunu depolama hesabı bağlantı dizemiz ve kapsayıcı adımız için uygulama ayarlarıyla yapılandırın. az storage account show-connection-string ile depolama hesabının bağlantı dizesini alın ve kapsayıcının adını files olarak ayarlayın.

    Uygulama adının genel olarak benzersiz olması gerekir. doldurmak <your-unique-app-name>için kendi adınızı seçin. yerine <your-unique-storage-account-name>daha önce oluşturduğunuz depolama hesabı adını kullanın. Azure CLI'da aşağıdaki komutların her birini sırayla çalıştırın:

    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. Uygulamanızı dağıtın. Aşağıdaki komutlar siteyi pub klasörüne yayımlar, site.zip dosyasına sıkıştırabilir ve zip'i App Service'e dağıtabilir.

    Dekont

    Aşağıdaki komutları çalıştırmadan önce kabuğunuzun hala mslearn-store-data-in-azure/store-app-data-with-azure-blob-storage/src/start dizininde olduğundan emin olun. Dizini bu konuma değiştirmek için cd mslearn-store-data-in-azure/store-app-data-with-azure-blob-storage/src/start seçeneğini kullanabilirsiniz.

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

    Çalışan uygulamayı görmek için tarayıcıda https://<your-unique-app-name>.azurewebsites.net bağlantısını açın. Aşağıdaki gibi görünmelidir:

    Screenshot of the FileUploader web app for C#.

  3. Uygulamayı test etmek için birkaç dosyayı karşıya yüklemeyi ve indirmeyi deneyin. Birkaç dosyayı karşıya yükledikten sonra kapsayıcıdaki blobları görmek için kabukta aşağıdaki kodu çalıştırın. değerini modülde daha önce oluşturduğunuz depolama hesabı adıyla değiştirin <your-unique-storage-account-name> :

    az storage blob list --account-name <your-unique-storage-account-name> --container-name files --query [].{Name:name} --output table
    

Uygulamanız tamamlandı. Dağıtın ve çalıştığını görün. App Service uygulaması oluşturmak, yapılandırmak ve dağıtmak için Azure Uygulaması Hizmeti için Maven Eklentisi'ni kullanın.

  1. Düzenleyicide pom.xml dosyasını açın ve xml etiketinin build altına aşağıdakileri plugins ekleyin.

    <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. Aşağıdaki komutlar, Azure Uygulaması Hizmeti için Maven Eklentisi için ortam değişkenlerini hazırlar. ile az storage account show-connection-stringdepolama hesabının bağlantı dizesi, ile az account showabonelik kimliğini ayıklayın ve bölge, fiyatlandırma, kapsayıcı adı ve uygulama adını ayarlayın. Uygulama adının genel olarak benzersiz olması gerekir. doldurmak <your-unique-app-name>için kendi adınızı seçin.

    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
    

    Bahşiş

    Gerçek dünya Java uygulamalarını dağıtmak için önerilen en düşük katman herhangi bir Premium V2 Hizmet Planıdır.

  3. Uygulamanızı dağıtın. Aşağıdaki komut uygulamayı ROOT.war içine oluşturur ve WAR dosyasını App Service'e dağıtır. Azure Uygulaması Hizmeti için Maven Eklentisi, ilk dağıtım girişiminde kaynakları sağlar.

    Dekont

    Aşağıdaki komutları çalıştırmadan önce kabuğunuzun hala mslearn-store-data-in-azure/store-java-ee-application-data-with-azure-blob-storage/start dizininde olduğundan emin olun. Dizini bu konuma değiştirmek için cd mslearn-store-data-in-azure/store-java-ee-application-data-with-azure-blob-storage/start seçeneğini kullanabilirsiniz.

    mvn clean package azure-webapp:deploy
    

    Çalışan uygulamayı görmek için tarayıcıda https://<your-unique-app-name>.azurewebsites.net bağlantısını açın. Aşağıdaki gibi görünmelidir:

    Screenshot of the FileUploader web app for Java.

    Bahşiş

    Bu modülde, uygulamayı Azure Uygulaması Service'te Tomcat 9'da dağıtmak üzere Azure Uygulaması Hizmeti için Maven Eklentisi kullanılır. Diğer seçenekler hakkında bilgi edinmek için bu modülün sonundaki Daha Fazla Okuma bölümüne bakın.

  4. Uygulamayı test etmek için birkaç dosyayı karşıya yüklemeyi ve indirmeyi deneyin. Birkaç dosyayı karşıya yükledikten sonra kapsayıcıdaki blobları görmek için kabukta aşağıdaki kodu çalıştırın.

    az storage blob list --account-name <your-unique-storage-account-name> --container-name files --query [].{Name:name} --output table