Exercice : Chargements et téléchargements d’objets blob
Pour interagir avec des objets blob individuels dans Stockage Blob, utilisez un objet BlobClient
. Vous pouvez obtenir un BlobClient
, en le demandant, avec le nom du blob, auprès de BlobContainerClient
dans lequel se trouve ce blob. BlobClient
a des méthodes pour charger, télécharger et gérer des objets blob individuels dans Stockage Blob.
Obtention d’un objet BlobClient
Pour obtenir un BlobClient
par nom, appelez les méthodes GetBlobClient
sur le BlobContainerClient
qui contient le blob, en utilisant son nom. Un objet BlobClient
vous permet d’interagir avec le blob, c’est-à-dire le charger, le télécharger ou le gérer dans Stockage Blob.
Le déplacement de données vers et à partir d’un objet blob est une opération réseau qui prend du temps. Le SDK Stockage Azure pour .NET fournit une implémentation asynchrone de toutes les méthodes qui nécessitent une activité réseau. Nous recommandons d’utiliser ces implémentations asynchrones autant que possible dans votre application.
Nous vous recommandons d’utiliser des flux plutôt que des structures en mémoire comme les tableaux d’octets ou les chaînes quand vous travaillez avec de grands objets de données. Cette approche évite de mettre en mémoire tampon l’intégralité du contenu en mémoire avant de l’envoyer à la cible. ASP.NET Core prend en charge les flux de lecture et d’écriture des demandes et réponses.
Pour obtenir un BlobClient
par nom, appelez les méthodes getBlobClient
sur le BlobContainerClient
qui contient le blob, en utilisant son nom. Un objet BlobClient
vous permet d’interagir avec le blob, c’est-à-dire le charger, le télécharger ou le gérer dans Stockage Blob.
Nous vous recommandons d’utiliser des flux plutôt que des structures en mémoire comme les tableaux d’octets ou les chaînes quand vous travaillez avec de grands objets de données. Cette approche évite de mettre en mémoire tampon l’intégralité du contenu en mémoire avant de l’envoyer à la cible.
Créer des objets blob
Pour créer un objet blob, appelez l’une des méthodes Upload
sur une référence à un objet blob qui n’existe pas dans le stockage. Cette approche crée l’objet blob dans le stockage et charge les données.
BlobClient blobClient = containerClient.GetBlobClient(name);
var response = blobClient.UploadAsync(fileStream);
Pour créer un objet blob, appelez l’une des méthodes upload
sur une référence à un objet blob qui n’existe pas dans le stockage. Cette approche crée l’objet blob dans le stockage et charge les données.
BlobClient blobClient = blobContainerClient.getBlobClient(name);
blobClient.upload(inputStream, contentLength);
Exercice
Terminez votre application en ajoutant le code pour les opérations de chargement et de téléchargement, puis déployez-la sur Azure App Service afin de la tester.
Charger
Pour charger un objet blob, vous implémentez la méthode BlobStorage.Save
. Tout d’abord, vous obtenez un objet BlobClient
qui représente le blob en appelant GetBlobClient
sur un BlobContainerClient
. Ensuite, utilisez la méthode UploadAsync
sur le BlobClient
pour enregistrer le Stream
des données passées à cette méthode jusqu’au Stockage Blob.
Dans l’éditeur, dans
BlobStorage.cs
, remplacezSave
par le code suivant. Utilisez CTRL+S pour enregistrer votre travail.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); }
Remarque
Le code de chargement basé sur les flux présenté ici est plus efficace que la lecture du fichier dans un tableau d’octets avant son envoi à Stockage Blob Azure. Toutefois, la technique
IFormFile
ASP.NET Core que vous utilisez pour obtenir le fichier à partir du client n’est pas une véritable implémentation de streaming de bout en bout. Elle est appropriée uniquement pour la gestion des chargements de petits fichiers.
Pour charger un objet blob, vous implémentez la méthode BlobStorage.save
. Tout d’abord, vous obtenez un objet BlobClient
qui représente le blob en appelant getBlobClient
sur un BlobContainerClient
. Ensuite, utilisez la méthode upload
sur le BlobClient
pour enregistrer le InputStream
des données passées à cette méthode jusqu’au Stockage Blob.
Dans l’éditeur, dans
BlobStorage.java
, remplacezsave
par le code suivant.public void save(String name, InputStream inputStream, long contentLength) { BlobClient blobClient = blobContainerClient.getBlobClient(name); blobClient.upload(inputStream, contentLength); }
Téléchargement
Pour télécharger un fichier, la méthode OpenReadAsync
sur l’objet BlobClient
est retournée. Cette méthode retourne un Stream
, ce qui signifie que votre code n’a pas besoin de charger tous les octets du Stockage Blob à la fois. Vous devez simplement retourner une référence au flux d’objets blob, qu’ASP.NET Core peut utiliser pour envoyer en streaming le fichier au navigateur.
Remplacez
Load
par ce code, puis enregistrez votre travail en utilisant 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(); }
Pour télécharger un fichier, utilisez la méthode openInputStream
sur BlobClient
. Cette méthode retourne un InputStream
, ce qui signifie que votre code n’a pas besoin de charger tous les octets du Stockage Blob à la fois. Vous devez simplement retourner une référence au flux d’objets blob, que IndexBean
peut utiliser pour envoyer en streaming le contenu au navigateur.
Remplacez read
par ce code, puis enregistrez votre travail.
public InputStream read(String name) {
BlobClient blobClient = blobContainerClient.getBlobClient(name);
return blobClient.openInputStream();
}
Déployer et exécuter dans Azure
Votre application est terminée. Déployez-la et regardez comment elle fonctionne.
Créez une application App Service, et configurez-la avec les paramètres d’application correspondant à la chaîne de connexion du compte de stockage et au nom du conteneur. Obtenez la chaîne de connexion du compte de stockage avec
az storage account show-connection-string
, et affectez au nom du conteneur la valeurfiles
.Le nom de l’application doit être globalement unique. Choisissez votre propre nom pour renseigner
<your-unique-app-name>
. Utilisez le nom du compte de stockage que vous avez créé précédemment pour remplacer<your-unique-storage-account-name>
. Exécutez chacune des commandes suivantes dans l’ordre dans Azure CLI :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
Déployez votre application. Les commandes suivantes publient le site dans le dossier pub, le compressent dans site.zip, puis déploient le fichier zip dans App Service.
Remarque
Assurez-vous que votre interpréteur de commandes se trouve toujours dans le répertoire mslearn-store-data-in-azure/store-app-data-with-azure-blob-storage/src/start avant d’exécuter les commandes suivantes. Vous pouvez utiliser
cd mslearn-store-data-in-azure/store-app-data-with-azure-blob-storage/src/start
pour changer de répertoire et désigner cet emplacement.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>
Pour voir l’application s’exécuter, dans un navigateur, ouvrez
https://<your-unique-app-name>.azurewebsites.net
. Elle doit ressembler à l’image suivante.Essayez de charger et télécharger des fichiers pour tester l’application. Une fois que vous avez chargé quelques fichiers, pour voir les objets blob dans le conteneur, exécutez la commande suivante dans l’interpréteur de commandes. Remplacez
<your-unique-storage-account-name>
par le nom du compte de stockage que vous avez créé précédemment dans le module :az storage blob list --account-name <your-unique-storage-account-name> --container-name files --query [].{Name:name} --output table
Votre application est terminée. Déployez-la et regardez comment elle fonctionne. Utilisez le plug-in Maven pour Azure App Service afin de créer une application App Service, la configurer et la déployer.
Dans l’éditeur, ouvrez le fichier pom.xml et ajoutez
plugins
sous la balise XMLbuild
.<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>
Les commandes suivantes préparent les variables d’environnement pour le plug-in Maven pour Azure App Service. Extrayez la chaîne de connexion du compte de stockage avec
az storage account show-connection-string
, l’ID d’abonnement avecaz account show
et définissez la région, les tarifs, le nom du conteneur et le nom de l’application. Le nom de l’application doit être globalement unique. Choisissez votre propre nom pour renseigner<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
Conseil
Le niveau minimal recommandé pour le déploiement d’applications Java réelles est n’importe quel plan de service Premium V2.
Déployez votre application. La commande suivante génère l’application dans ROOT.war, puis déploie le fichier WAR sur App Service. Le plug-in Maven pour Azure App Service provisionne les ressources lors de la première tentative de déploiement.
Remarque
Assurez-vous que votre interpréteur de commandes se trouve toujours dans le répertoire mslearn-store-data-in-azure/store-java-ee-application-data-with-azure-blob-storage/start avant d’exécuter les commandes suivantes. Vous pouvez utiliser
cd mslearn-store-data-in-azure/store-java-ee-application-data-with-azure-blob-storage/start
pour changer de répertoire et désigner cet emplacement.mvn clean package azure-webapp:deploy
Pour voir l’application s’exécuter, dans un navigateur, ouvrez
https://<your-unique-app-name>.azurewebsites.net
. Elle doit ressembler à l’image suivante.Conseil
Ce module utilise le plug-in Maven pour Azure App Service afin de déployer l’application sur Tomcat 9 sur Azure App Service. Pour découvrir d’autres options, consultez la section En savoir plus à la fin de ce module.
Essayez de charger et télécharger des fichiers pour tester l’application. Une fois que vous avez chargé quelques fichiers, pour voir les objets blob dans le conteneur, exécutez la commande suivante dans l’interpréteur de commandes.
az storage blob list --account-name <your-unique-storage-account-name> --container-name files --query [].{Name:name} --output table