Ćwiczenie — przekazywanie i pobieranie obiektów blob
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 plikuBlobStorage.cs
następującym kodem: Użyj 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 plikuBlobStorage.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 Stream
wartość , 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 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 InputStream
wartość , 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.
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 nafiles
.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
Wdróż aplikację. Następujące polecenia publikują witrynę w folderze pub , spakuj ją w 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ć polecenia
cd 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 deploy \ --src-path ../site.zip \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --name <your-unique-app-name>
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.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ć.
W edytorze otwórz plik pom.xml i dodaj następujący kod
plugins
pod tagiembuild
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>
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-string
identyfikatora subskrypcji z wartościąaz account show
i 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.
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ć polecenia
cd 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.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.
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