Charger une image dans un objet blob Stockage Azure avec JavaScript

Utilisez une application web statique pour charger un fichier dans un objet blob Stockage Azure à l’aide d’un package npm @azure/storage-blob Stockage Azure avec un jeton SAP Stockage Azure.

Prérequis

  • Abonnement Azure ; si vous ne disposez pas d’un abonnement Azure, vous pouvez vous inscrire pour un compte Azure gratuit.
  • Compte GitHub à fork et envoyer (push) vers un dépôt.

Architecture de l'application

Cette architecture d’application comprend deux ressources Azure :

  • Azure Static Web Apps pour l’application cliente générée statiquement. La ressource fournit également l’API Azure Functions managée. Managé signifie que la ressource Static Web Apps gère la ressource d’API pour sa propre utilisation.
  • Stockage Azure pour le stockage d’objets blob.

Diagram showing how a customer interacts from their computer to use the website to upload a file to Azure Storage directly.

Étape Description
1 Le client se connecte au site web généré statiquement. Le site web est hébergé dans Azure Static Web Apps.
2 Le client utilise ce site web pour sélectionner un fichier à charger. Pour ce tutoriel, l’infrastructure frontale est Vite React et le fichier chargé est un fichier image.
3 Le site web appelle l’API sas Azure Functions pour obtenir un jeton SAP en fonction du nom de fichier exact à charger. L’API serverless utilise le sdk Stockage Blob Azure pour créer le jeton SAP. L’API retourne l’URL complète à utiliser pour charger le fichier, qui inclut le jeton SAP comme chaîne de requête.
https://YOUR-STORAGE-NAME.blob.core.windows.net/YOUR-CONTAINER/YOUR-FILE-NAME?YOUR-SAS-TOKEN
4 Le site web frontal utilise l’URL du jeton SAP pour charger le fichier directement dans Stockage Blob Azure.

Environnements locaux et de build

Ce tutoriel utilise les environnements suivants :

  • Développement local avec GitHub Codespaces ou Visual Studio Code.
  • Générez et déployez avec GitHub Actions.

1. Exemple de référentiel d’applications fork avec GitHub

Ce tutoriel utilise des actions GitHub pour déployer l’exemple d’application sur Azure. Vous avez besoin d’un compte GitHub et d’une duplication de l’exemple de référentiel d’applications pour effectuer ce déploiement.

  1. Dans un navigateur web, utilisez le lien suivant pour commencer la duplication pour votre propre compte du dépôt d’exemples : Azure-Samples/azure-typescript-e2e-apps.
  2. Effectuez les étapes de duplication de l’exemple avec la branche principale uniquement.

2. Configurer l’environnement de développement

Un environnement de conteneur de développement est disponible avec toutes les dépendances requises pour effectuer chaque exercice de ce projet. Vous pouvez exécuter le conteneur de développement dans GitHub Codespaces ou localement à l’aide de Visual Studio Code.

GitHub Codespaces exécute un conteneur de développement géré par GitHub avec Visual Studio Code pour le web comme interface utilisateur. Pour l’environnement de développement le plus simple, nous utilisons GitHub Codespaces pour que vous disposiez des outils et des dépendances du développeur appropriés préinstallés pour exécuter ce module de formation.

Important

Tous les comptes GitHub peuvent utiliser codespaces pendant jusqu’à 60 heures gratuites chaque mois avec 2 instances principales. Pour plus d’informations, consultez Le stockage mensuel inclus et les heures de cœur GitHub Codespaces.

  1. Dans un navigateur web, sur votre fourche GitHub de l’exemple de référentiel, démarrez le processus de création d’un espace de code GitHub sur la main branche de votre fourche en sélectionnant le bouton CODE .

    GitHub screenshot of Code Spaces buttons for a repository.

  2. Sous l’onglet Espaces de code, sélectionnez les points de suspension. ...

    GitHub screenshot of Code Spaces tab with ellipsis control highlighted.

  3. Sélectionnez + Nouveau avec les options permettant de sélectionner un conteneur de développement Codespaces spécifique.

    GitHub screenshot of Codespaces New with options menu item highlighted.

  4. Sélectionnez les options suivantes, puis sélectionnez Créer un espace de code.

    • Branche: main
    • Configuration du conteneur de développement : Tutorial: Upload file to storage with SAS Token
    • Région : accepter la valeur par défaut
    • Type d’ordinateur : accepter la valeur par défaut

    GitHub screenshot of Codespaces New with options menu with the following dev container highlighted, Tutorial: Upload file to storage with SAS Token.

  5. Attendez que le codespace démarre. Ce processus de démarrage peut prendre quelques minutes.

  6. Ouvrez un nouveau terminal dans le codespace.

    Conseil

    Vous pouvez utiliser le menu principal pour accéder à l’option de menu Terminal, puis sélectionner l’option Nouveau terminal.

    Screenshot of the codespaces menu option to open a new terminal.

  7. Vérifiez les versions des outils que vous utilisez dans ce tutoriel.

    node --version
    npm --version
    func --version
    

    Ce tutoriel nécessite les versions suivantes de chaque outil, qui sont préinstallées dans votre environnement :

    Outil Version
    Node.js ≥ 18
    npm ≥ 9.5
    Azure Functions Core Tools ≥ 4.5098
  8. Fermez le terminal.

  9. Les étapes restantes de ce didacticiel se déroulent dans le contexte de ce conteneur de développement.

3. Installer des dépendances

L’exemple d’application de ce didacticiel se trouve dans le azure-upload-file-to-storage dossier. Vous n’aurez pas besoin d’utiliser d’autres dossiers dans le projet.

  1. Dans Visual Studio Code, ouvrez un terminal et accédez au dossier du projet.

    cd azure-upload-file-to-storage
    
  2. Fractionnez le terminal pour que vous ayez deux terminaux, un pour l’application cliente et un pour l’application API.

  3. Dans l’un des terminaux, exécutez la commande suivante pour installer les dépendances de l’application API et exécuter l’application.

    cd api && npm install
    
  4. Dans l’autre terminal, exécutez la commande pour installer l’application cliente.

    cd app && npm install
    

4. Créer une ressource de stockage avec l’extension Visual Studio

Créez la ressource Stockage à utiliser avec l’exemple d’application. Le stockage est utilisé pour les éléments suivants :

  • Déclencheurs dans l’application Azure Functions
  • Stockage Blob (fichier)
  1. Accédez à l’extension Stockage Azure.

  2. Connectez-vous à Azure si nécessaire.

  3. Cliquez avec le bouton droit sur l’abonnement, puis sélectionnez Create Resource....

    Screenshot of Visual Studio Code in the Azure Explorer with the right-click menu showing the Create Resource item highlighted.

  4. Sélectionnez Créer Stockage compte dans la liste.

  5. Suivez les invites en utilisant le tableau suivant pour comprendre comment créer votre ressource de stockage.

    Propriété Valeur
    Entrez un nom global unique pour la nouvelle application web. Entrez une valeur unique telle que fileuploadstor, pour votre nom de ressource Stockage.

    Ce nom unique est le nom de votre ressource utilisé dans la section suivante. Utilisez seulement des caractères et des chiffres, avec une longueur maximale de 24. Vous utiliserez ce nom de compte ultérieurement.
    Sélectionnez un emplacement pour les nouvelles ressources. Utilisez l’emplacement recommandé.
  6. Quand le processus de création de l’application est terminé, une notification s’affiche avec des informations sur la nouvelle ressource.

    Screenshot of Visual Studio Code showing the Azure Activity Bar and the notification that the storage account was successfully created.

5. Configurer Stockage CORS

Étant donné que le navigateur est utilisé pour charger le fichier, le compte Stockage Azure doit configurer CORS pour autoriser les requêtes inter-origines.

  1. Accédez à l’extension Stockage Azure. Cliquez avec le bouton droit sur votre ressource de stockage, puis sélectionnez Ouvrir dans le portail.

  2. Dans la section Portail Azure compte de stockage Paramètres, sélectionnez Partage de ressources (CORS).

  3. Utilisez les propriétés suivantes pour définir CORS pour ce didacticiel.

    • Origines autorisées : *
    • Méthodes autorisées : toutes les mises à jour correctives
    • En-têtes autorisés : *
    • En-têtes exposés : *
    • Âge maximal : 86400

    Ces paramètres sont utilisés pour ce didacticiel pour simplifier les étapes et ne sont pas destinés à indiquer les meilleures pratiques ou la sécurité. En savoir plus sur CORS pour Stockage Azure.

  4. Sélectionnez Enregistrer.

6. Accorder un accès anonyme au stockage

Le chargement de fichiers est sécurisé à partir du client lorsque vous créez un jeton SAS limité et limité à l’autorisation. Toutefois, une fois le fichier chargé, dans ce scénario de didacticiel, vous souhaitez que tout le monde le voit. Pour ce faire, vous devez modifier l’autorisation de stockage pour qu’elle soit accessible publiquement.

Même si le compte est accessible publiquement, chaque conteneur et chaque objet blob peuvent avoir un accès privé. Une méthode plus sécurisée, mais trop complexe pour ce didacticiel consiste à charger sur un compte de stockage avec le jeton SAP, puis à déplacer l’objet blob vers un autre compte de stockage avec un accès public.

  1. Pour activer l’accès public dans le Portail Azure, sélectionnez la page Vue d’ensemble de votre compte de stockage, dans la section Propriétés, sélectionnez Accès anonyme Blob, puis Désactivé.
  2. Dans la page Configuration, activez Autoriser l’accès anonyme blob.

7. Créer un conteneur de chargement

  1. Toujours dans le compte de stockage Portail Azure, dans la section Stockage des données, sélectionnez Conteneurs.

  2. Sélectionnez + Conteneur pour créer votre upload conteneur avec les paramètres suivants :

    • Nom : upload
    • Niveau d’accès public : Blob
  3. Sélectionnez Créer.

8. Accordez-vous l’accès aux données Blob

Pendant que vous avez créé la ressource, vous n’êtes pas autorisé à afficher le contenu du conteneur. Cela est réservé pour des rôles IAM spécifiques. Ajoutez votre compte pour que vous puissiez afficher les objets blob dans les conteneurs.

  1. Toujours dans le compte de stockage Portail Azure, sélectionnez Contrôle d’accès (IAM).
  2. Sélectionnez Ajouter des attributions de rôle.
  3. Recherchez et sélectionnez Stockage Contributeur aux données blob. Cliquez sur Suivant.
  4. Sélectionnez + Sélectionner les membres.
  5. Recherchez et sélectionnez votre compte.
  6. Sélectionnez Vérifier + attribuer.
  7. Sélectionnez Conteneurs , puis le conteneur de chargement . Vous devez être en mesure de voir qu’il n’y a pas d’objets blob dans le conteneur sans erreurs d’autorisation.

9. Obtenir Stockage informations d’identification de ressource

Les informations d’identification des ressources Stockage sont utilisées dans l’application API Azure Functions pour se connecter à la ressource Stockage.

  1. Toujours dans le Portail Azure, dans la section Sécurité + mise en réseau, sélectionnez Clés d’accès.

  2. N’oubliez pas que les fichiers d’API sont trouvés à l’adresse ./workspaces/azure-typescript-e2e-apps/azure-upload-file-to-storage/api.

  3. Dans le dossier d’API, renommez le fichier en local.settings.json.samplelocal.settings.json. Le fichier est ignoré par Git afin qu’il ne soit pas case activée dans le contrôle de code source.

  4. Mettez à jour les paramètres pour local.settings.json utiliser le tableau suivant.

    Propriété Valeur Description
    Azure_Stockage_AccountName Stockage Azure nom du compte, par exemple : fileuploadstor. Utilisé dans le code source pour se connecter à Stockage ressource.
    Azure_Stockage_AccountKey Clé du compte de Stockage Azure Utilisé dans le code source pour se connecter à Stockage ressource.
    AzureWebJobsStorage Stockage Azure compte chaîne de connexion Utilisez le runtime Azure Functions pour stocker l’état et les journaux.

Il peut sembler que vous avez entré les mêmes informations d’identification de compte deux fois, une fois en tant que clé et une fois en tant que chaîne de connexion. Vous l’avez fait, mais spécifiquement pour ce tutoriel simple. En règle générale, les applications Azure Functions doivent avoir une ressource Stockage distincte qui n’est pas réutilisée à une autre fin. Lorsque vous créez la ressource De fonction Azure plus loin dans le tutoriel, vous n’aurez pas besoin de définir la valeur AzureWebJobs Stockage pour la ressource cloud. Vous devez uniquement définir les valeurs Azure_Stockage_AccountName et Azure_Stockage_AccountKey utilisées dans le code source.

10. Exécuter l’application API

Exécutez l’application Functions pour vous assurer qu’elle fonctionne correctement avant de la déployer sur Azure.

  1. Dans le terminal de l’application API, exécutez la commande suivante pour démarrer l’application API.

    npm run start
    
  2. Attendez que l’application Azure Functions soit démarrée. Vous recevrez un avis indiquant que le port de l’application Azure Functions, 7071 est désormais disponible. Vous devez également voir les API répertoriées dans le terminal pour l’application API.

    Functions:
    
            list: [POST,GET] http://localhost:7071/api/list
    
            sas: [POST,GET] http://localhost:7071/api/sas
    
            status: [GET] http://localhost:7071/api/status
    
  3. Sélectionnez l’onglet Ports dans le volet inférieur, cliquez avec le bouton droit sur le port 7071 , puis sélectionnez Visibilité des ports, puis sélectionnez Public.

    Si vous n’exposez pas cette application en tant que public, vous obtenez une erreur lorsque vous utilisez l’API à partir de l’application cliente.

  4. Pour tester que l’API fonctionne et se connecte au stockage, sous l’onglet Ports dans le volet inférieur, sélectionnez l’icône globe dans la zone d’adresse locale pour le port 7071. Cela ouvre un navigateur web à l’application functions.

  5. Ajoutez l’itinéraire d’API à la barre d’adresses URL : /api/sas?container=upload&file=test.png. Il est ok que le fichier ne se trouve pas encore dans le conteneur. L’API crée le jeton SAP en fonction de l’emplacement dans lequel vous souhaitez qu’il soit chargé.

  6. La réponse JSON doit ressembler à ce qui suit :

    {
        "url":"https://YOUR-STORAGE-RESOURCE.blob.core.windows.net/upload/test.png?sv=2023-01-03&spr=https&st=2023-07-26T22%3A15%3A59Z&se=2023-07-26T22%3A25%3A59Z&sr=b&sp=w&sig=j3Yc..."
    }
    
  7. Copiez la base de l’URL de l’API dans la barre d’adresses du navigateur (et non l’URL du jeton SAP dans l’objet JSON) à utiliser à l’étape suivante. L’URL de base est tout avant /api/sas.

11. Configurer et exécuter l’application cliente

  1. Renommez le fichier ./azure-upload-file-to-storage/app/.env.sample en .env.

  2. Ouvrez le .env fichier et collez l’URL de base de la section précédente comme valeur du VITE_API_SERVERfichier .

    Un exemple d’environnement Codespaces peut ressembler à quelque chose VITE_API_SERVER=https://improved-space-fishstick-pgvxvxjpqgrh6qxp-7071.app.github.dev

  3. Dans l’autre terminal fractionné, démarrez l’application cliente avec la commande suivante :

    npm run dev
    
  4. Attendez que le terminal retourne l’avis suivant que l’application est disponible sur le port 5173.

      VITE v4.4.4  ready in 410 ms
    
      ➜  Local:   https://localhost:5173/
      ➜  Network: use --host to expose
      ➜  press h to show help
    
  5. Sélectionnez l’onglet Ports dans le volet inférieur, puis cliquez avec le bouton droit sur le port 5173 , puis sélectionnez l’icône globe.

  6. Vous devez voir l’application web simple.

    Screenshot of web browser showing web app with Select File button available.

  7. Interagissez avec l’application web :

    • Sélectionnez un fichier image (*.jpg ou *.png) à partir de votre ordinateur local à charger.
    • Sélectionnez le bouton Obtenir une SAP pour demander un jeton SAP à partir de l’application API. La réponse affiche l’URL complète à utiliser pour charger le fichier dans Stockage.
    • Sélectionnez le bouton Charger pour envoyer directement le fichier image à Stockage.

    Screenshot of web browser showing web app with the image file uploaded and a thumbnail of the file displayed.

  8. L’application cliente et l’application API ont réussi à collaborer dans un environnement de développement conteneurisé.

12. Valider les modifications du code

  1. Dans Visual Studio Code, ouvrez l’onglet Contrôle de code source.
  2. Sélectionnez l’icône + pour mettre en scène toutes les modifications. Ces modifications doivent inclure uniquement de nouveaux fichiers package-lock.json pour les dossiers et api les app dossiers de ce didacticiel.

13. Déployer une application web statique sur Azure

L’application Azure Functions utilise une fonctionnalité en préversion, elle doit être déployée dans usa Ouest 2 pour fonctionner correctement.

  1. Dans Visual Studio Code, sélectionnez l’Explorateur Azure.

  2. Dans l’Explorateur Azure, cliquez avec le bouton droit sur le nom de l’abonnement, puis sélectionnez Create Resource....

  3. Sélectionnez Créer une application web statique dans la liste.

  4. Suivez les invites à l’aide du tableau suivant pour comprendre comment créer votre ressource Static Web App.

    Propriété Valeur
    Entrez un nom global unique pour la nouvelle application web. Entrez une valeur unique telle que fileuploadstor, pour votre nom de ressource Stockage.

    Ce nom unique est le nom de votre ressource utilisé dans la section suivante. Utilisez seulement des caractères et des chiffres, avec une longueur maximale de 24. Vous utiliserez ce nom de compte ultérieurement.
    Sélectionnez un emplacement pour les nouvelles ressources. Utilisez l’emplacement recommandé.
  5. Suivez les invites pour fournir les informations suivantes :

    Prompt Entrez
    Sélectionnez un groupe de ressources pour les nouvelles ressources. Utilisez le groupe de ressources que vous avez créé pour votre ressource de stockage.
    Entrez le nom de la nouvelle application web statique. Acceptez le nom par défaut.
    Sélectionner une référence SKU Sélectionnez la référence SKU gratuite pour ce tutoriel. Si vous disposez déjà d’une ressource Static Web App gratuite dans votre abonnement, sélectionnez le niveau tarifaire suivant.
    Choisissez la présélection de build pour configurer la structure de projet par défaut. Sélectionnez Personnalisé.
    Sélectionnez l’emplacement de votre code d’application azure-upload-file-to-storage/app
    Sélectionner l’emplacement de votre code Azure Functions azure-upload-file-to-storage/api
    Entrez le chemin d’accès de votre sortie de build... dist

    C’est le chemin allant de votre application aux fichiers (générés) statiques.
    Sélectionnez un emplacement pour les nouvelles ressources. Sélectionnez une région proche de chez vous.
  6. Une fois le processus terminé, une fenêtre contextuelle de notification s’affiche. Sélectionnez Afficher/modifier le workflow.

  7. Votre fourche distante a un nouveau fichier de flux de travail pour le déploiement sur Static Web Apps. Extrayez ce fichier dans votre environnement avec la commande suivante dans le terminal :

    git pull origin main
    
  8. Ouvrez le fichier de flux de travail situé à l’adresse /.github/workflows/.

  9. Vérifiez que la section du flux de travail spécifique à l’application web statique de ce didacticiel doit ressembler à ceci :

    ###### Repository/Build Configurations - These values can be configured to match your app requirements. ######
    # For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig
    app_location: "/azure-upload-file-to-storage/app" # App source code path
    api_location: "/azure-upload-file-to-storage/api" # Api source code path - optional
    output_location: "dist" # Built app content directory - optional
    ###### End of Repository/Build Configurations ######
    
  10. Accédez à votre fourche GitHub de l’exemple, https://github.com/YOUR-ACCOUNT/azure-typescript-e2e-apps/actions pour vérifier l’action de génération et de déploiement, nommée Azure Static Web Apps CI/CD, terminée avec succès. L’exécution de cette opération nécessite quelques minutes.

  11. Accédez à votre Portail Azure pour votre application et affichez la section API de Paramètres. Le nom de la ressource back-end dans l’environnement (managed) de production indique que vos API ont été correctement déployées.

  12. Sélectionnez (géré) pour afficher la liste des API chargées dans l’application :

    • list
    • Sas
    • statut
  13. Accédez à la page Vue d’ensemble pour rechercher l’URL de votre application déployée.

  14. Le déploiement de l’application est terminé.

14. Configurer l’API avec Stockage nom et clé de ressource

L’application a besoin du nom et de la clé de la ressource Stockage Azure avant que l’API fonctionne correctement.

  1. Toujours dans l’Explorateur Azure, cliquez avec le bouton droit sur la ressource Static Web App, puis sélectionnez Ouvrir dans le portail.

  2. Sélectionnez Configuration dans la section Paramètres.

  3. Ajoutez des paramètres d’application à l’aide du tableau suivant.

    Propriété Valeur Description
    Azure_Stockage_AccountName Stockage Azure nom du compte, par exemple : fileuploadstor. Utilisé dans le code source pour se connecter à Stockage ressource.
    Azure_Stockage_AccountKey Clé du compte de Stockage Azure Utilisé dans le code source pour se connecter à Stockage ressource.
  4. Sélectionnez Enregistrer dans la page Configuration pour enregistrer les deux paramètres.

Remarque

Vous n’avez pas besoin de définir la variable env de l’application cliente VITE_API_SERVER , car l’application cliente et l’API sont hébergées à partir du même domaine.

15. Utiliser l’application web statique déployée par Azure

Vérifiez que le déploiement et la configuration ont réussi à l’aide du site web.

  1. Dans Visual Studio Code, cliquez avec le bouton droit sur votre application web statique dans l’Explorateur Azure, puis sélectionnez Parcourir le site.
  2. Dans la nouvelle fenêtre de navigateur web, sélectionnez Choisir un fichier, puis sélectionnez un fichier image (*.png ou *.jpg) à charger.
  3. Sélectionnez Obtenir le jeton sas. Cette action transmet le nom de fichier à l’API et reçoit l’URL du jeton SAP nécessaire pour charger le fichier.
  4. Sélectionnez Charger le fichier pour utiliser l’URL du jeton SAP pour charger le fichier. Le navigateur affiche la miniature et l’URL du fichier chargé.

16. Nettoyer les ressources

Dans Visual Studio Code, utilisez l’Explorateur Azure pour les groupes de ressources, cliquez avec le bouton droit sur votre groupe de ressources, puis sélectionnez Supprimer.

Ceci supprime toutes les ressources du groupe, y compris vos ressources Stockage et Application web statique.

Résolution des problèmes

Signalez les problèmes liés à cet exemple dans le dépôt GitHub indiqué ci-dessous. Incluez ce qui suit avec le problème :

  • URL de l’article
  • Étape ou contexte dans l’article problématique
  • Votre environnement de développement

Exemple de code

Si vous souhaitez continuer avec cette application, découvrez comment déployer l’application sur Azure pour l’hébergement avec l’une des options suivantes :