Ćwiczenie — przekazywanie i pobieranie obiektów blob

Ukończone

Aby wchodzić w interakcje z poszczególnymi obiektami blob w usłudze Blob Storage, użyj BlobClient obiektu. Element można uzyskać BlobClient , żądając jej przy użyciu nazwy obiektu blob z BlobContainerClient obiektu blob, w którym znajduje się obiekt blob. BlobClient Program zawiera metody przekazywania, pobierania i zarządzania poszczególnymi obiektami blob w usłudze Blob Storage.

Pobieranie obiektu BlobClient

Aby uzyskać nazwę BlobClient , wywołaj GetBlobClient metody obiektu BlobContainerClient blob zawierającego obiekt blob przy użyciu nazwy obiektu blob. Obiekt BlobClient umożliwia interakcję z obiektem blob przez przekazywanie, pobieranie lub zarządzanie obiektem blob w usłudze Blob Storage.

Przenoszenie danych do i z obiektu blob to operacja sieciowa, która zajmuje trochę czasu. Zestaw SDK usługi Azure Storage dla platformy .NET zapewnia asynchroniczną implementację wszystkich metod wymagających aktywności sieciowej. Zalecamy używanie tych implementacji asynchronicznych zawsze, gdy jest to możliwe w aplikacji.

Zalecamy używanie strumieni zamiast struktur w pamięci, takich jak tablice bajtów lub ciągi podczas pracy z dużymi obiektami danych. Takie podejście pozwala uniknąć buforowania pełnej zawartości w pamięci przed wysłaniem jej do miejsca docelowego. Platforma ASP.NET Core obsługuje odczytywanie strumieni z żądań i odpowiedzi oraz zapisywanie ich w nich.

Aby uzyskać nazwę BlobClient , wywołaj getBlobClient metody obiektu BlobContainerClient blob zawierającego obiekt blob przy użyciu nazwy obiektu blob. Obiekt BlobClient umożliwia interakcję z obiektem blob przez przekazywanie, pobieranie lub zarządzanie obiektem blob w usłudze Blob Storage.

Zalecamy używanie strumieni zamiast struktur w pamięci, takich jak tablice bajtów lub ciągi podczas pracy z dużymi obiektami danych. Takie podejście pozwala uniknąć buforowania pełnej zawartości w pamięci przed wysłaniem jej do miejsca docelowego.

Tworzenie nowych obiektów blob

Aby utworzyć nowy obiekt blob, wywołaj jedną z metod Upload na odwołaniu do obiektu blob, który nie istnieje w magazynie. Takie podejście wykonuje dwie czynności: tworzy obiekt blob w magazynie i przekazuje dane.

BlobClient blobClient = containerClient.GetBlobClient(name);

var response = blobClient.UploadAsync(fileStream);

Aby utworzyć nowy obiekt blob, wywołaj jedną z metod upload na odwołaniu do obiektu blob, który nie istnieje w magazynie. Takie podejście wykonuje dwie czynności: tworzy obiekt blob w magazynie i przekazuje dane.

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

Ćwiczenie

Zakończ aplikację, dodając kod przekazywania i pobierania, a następnie wdróż ją w usłudze aplikacja systemu Azure na potrzeby testowania.

Przekazywanie

Aby przekazać obiekt blob, należy zaimplementować metodę BlobStorage.Save . Najpierw uzyskasz BlobClient obiekt reprezentujący obiekt blob, wywołując GetBlobClient metodę BlobContainerClient. Następnie użyj UploadAsync metody w obiekcie BlobClient , aby zapisać Stream dane przekazane do tej metody do usługi Blob Storage.

  • W edytorze zastąp element Save w pliku BlobStorage.cs następującym kodem: Użyj klawiszy CTRL+S, aby zapisać pracę.

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

    Uwaga

    Przedstawiony tutaj kod przekazywania oparty na strumieniu jest bardziej wydajny niż odczytywanie pliku do tablicy bajtów przed wysłaniem go do usługi Blob Storage. Jednak technika ASP.NET Core IFormFile używana do pobierania pliku z klienta nie jest prawdziwą kompleksową implementacją przesyłania strumieniowego. Jest ona odpowiednia tylko do obsługi przekazywania małych plików.

Aby przekazać obiekt blob, należy zaimplementować metodę BlobStorage.save . Najpierw uzyskasz BlobClient obiekt reprezentujący obiekt blob, wywołując getBlobClient metodę BlobContainerClient. Następnie użyj upload metody w obiekcie BlobClient , aby zapisać InputStream dane przekazane do tej metody do usługi Blob Storage.

  • W edytorze zastąp element save w pliku BlobStorage.java następującym kodem:

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

Pobierz

Aby pobrać plik, OpenReadAsync zwracana jest metoda obiektu BlobClient . Ta metoda zwraca Streamwartość , co oznacza, że kod nie musi ładować wszystkich bajtów z usługi Blob Storage jednocześnie. Wystarczy zwrócić odwołanie do strumienia obiektów blob, który ASP.NET Core może użyć do przesyłania strumieniowego pliku do przeglądarki.

  • Zastąp Load element tym kodem i zapisz swoją pracę przy użyciu klawiszy 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();
    }
    

Aby pobrać plik, użyj openInputStream metody w pliku BlobClient. Ta metoda zwraca InputStreamwartość , co oznacza, że kod nie musi ładować wszystkich bajtów z usługi Blob Storage jednocześnie. Wystarczy zwrócić odwołanie do strumienia obiektów blob, za pomocą którego IndexBean można przesyłać strumieniowo zawartość do przeglądarki.

Zastąp metodę read tym kodem i zapisz swoją pracę:

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

Wdrażanie i uruchamianie na platformie Azure

Aplikacja została zakończona. Wdróż go i zobacz, jak działa.

  1. Utwórz aplikację usługi App Service i skonfiguruj ją przy użyciu parametrów połączenia konta magazynu oraz nazwy kontenera za pomocą ustawień aplikacji. Pobierz parametry połączenia konta magazynu za pomocą polecenia az storage account show-connection-string i ustaw nazwę kontenera na files.

    Nazwa aplikacji musi być globalnie unikatowa. Wybierz własną nazwę, aby wypełnić ciąg <your-unique-app-name>. Użyj utworzonej wcześniej nazwy konta magazynu, aby zastąpić element <your-unique-storage-account-name>. Uruchom każde z następujących poleceń w kolejności w interfejsie wiersza polecenia platformy Azure:

    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. Wdróż aplikację. Następujące polecenia publikują witrynę w folderze pub , spakuj ją w pliku site.zip i wdróż plik zip w usłudze App Service.

    Uwaga

    Przed uruchomieniem poniższych poleceń upewnij się, że powłoka nadal znajduje się w katalogu mslearn-store-data-in-azure/store-app-data-with-azure-blob-storage/src/start . Aby zmienić katalog na tę lokalizację, można użyć poleceniacd mslearn-store-data-in-azure/store-app-data-with-azure-blob-storage/src/start.

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

    Aby zobaczyć uruchomioną aplikację, otwórz stronę https://<your-unique-app-name>.azurewebsites.net w przeglądarce. Powinien wyglądać jak na poniższym obrazku.

    Screenshot of the FileUploader web app for C#.

  3. Spróbuj przekazać i pobrać jakieś pliki, aby przetestować aplikację. Po przekazaniu kilku plików, aby wyświetlić obiekty blob w kontenerze, uruchom następujący kod w powłoce. Zastąp <your-unique-storage-account-name> ciąg nazwą konta magazynu utworzoną wcześniej w module:

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

Aplikacja została zakończona. Wdróż go i zobacz, jak działa. Użyj wtyczki Maven dla usługi aplikacja systemu Azure Service, aby utworzyć aplikację usługi App Service, skonfigurować ją i wdrożyć.

  1. W edytorze otwórz plik pom.xml i dodaj następujący kod plugins w tagu build XML.

    <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. Następujące polecenia przygotowują zmienne środowiskowe dla wtyczki Maven dla usługi aplikacja systemu Azure Service. Wyodrębnij parametry połączenia konta magazynu za pomocą az storage account show-connection-stringidentyfikatora subskrypcji z wartością az account showi ustaw region, cennik, nazwę kontenera i nazwę aplikacji. Nazwa aplikacji musi być globalnie unikatowa. Wybierz własną nazwę, aby wypełnić ciąg <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
    

    Napiwek

    Minimalna zalecana warstwa do wdrażania rzeczywistych aplikacji Java to dowolny plan usługi Premium V2.

  3. Wdróż aplikację. Następujące polecenie kompiluje aplikację w pliku ROOT.war i wdraża plik WAR w usłudze App Service. Wtyczka Maven dla usługi aplikacja systemu Azure aprowizuje zasoby podczas pierwszej próby wdrożenia.

    Uwaga

    Przed uruchomieniem następujących poleceń upewnij się, że powłoka nadal znajduje się w katalogu mslearn-store-data-in-azure/store-java-ee-application-data-with-azure-blob-storage/start . Aby zmienić katalog na tę lokalizację, można użyć poleceniacd mslearn-store-data-in-azure/store-java-ee-application-data-with-azure-blob-storage/start.

    mvn clean package azure-webapp:deploy
    

    Aby zobaczyć uruchomioną aplikację, otwórz stronę https://<your-unique-app-name>.azurewebsites.net w przeglądarce. Powinien wyglądać jak na poniższym obrazku.

    Screenshot of the FileUploader web app for Java.

    Napiwek

    W tym module użyto wtyczki Maven dla usługi aplikacja systemu Azure, aby wdrożyć aplikację na serwerze Tomcat 9 w usłudze aplikacja systemu Azure Service. Aby dowiedzieć się więcej o innych opcjach, zobacz sekcję Dalsze informacje na końcu tego modułu.

  4. Spróbuj przekazać i pobrać jakieś pliki, aby przetestować aplikację. Po przekazaniu kilku plików, aby wyświetlić obiekty blob w kontenerze, uruchom następujący kod w powłoce.

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