Utiliser JavaScript SDK dans Node.js pour gérer les répertoires et les fichiers dans Azure Data Lake Storage Gen2

Cet article explique comment utiliser Node.js pour créer et gérer les répertoires et les fichiers dans les comptes de stockage dotés d’un espace de noms hiérarchique.

Pour en savoir plus sur la façon d’obtenir, de définir et de mettre à jour les listes de contrôle d’accès (ACL, Access Control List) des répertoires et des fichiers, consultez Utiliser JavaScript SDK dans Node.js pour gérer les listes de contrôle d’accès dans Azure Data Lake Storage Gen2.

Package (Gestionnaire de package Node) | Exemples | Envoyer des commentaires

Prérequis

  • Un abonnement Azure. Pour plus d’informations, consultez Obtenir l’essai gratuit Azure.

  • Un compte de stockage doté d’un espace de noms hiérarchique activé. Pour créer un test, suivez ces instructions.

  • Si vous utilisez ce package dans une application Node.js, vous devez utiliser Node.js 8.0.0 ou version ultérieure.

Configuration de votre projet

Installez la bibliothèque de client Data Lake pour JavaScript en ouvrant une fenêtre de terminal, puis en entrant la commande suivante.

npm install @azure/storage-file-datalake

Importez le package storage-file-datalake en plaçant cette instruction en haut de votre fichier de code.

const {
AzureStorageDataLake,
DataLakeServiceClient,
StorageSharedKeyCredential
} = require("@azure/storage-file-datalake");

Remarque

L’accès multiprotocole sur Data Lake Storage permet aux applications d’utiliser à la fois les API Blob et les API Data Lake Storage Gen2 pour travailler avec des données dans des comptes de stockage pour lesquels l’espace de noms hiérarchique (HNS) est activé. Lorsque vous travaillez avec des fonctionnalités propres à Data Lake Storage Gen2, telles que les opérations de répertoire et les listes ACL, utilisez les API de Data Lake Storage Gen2, comme indiqué dans cet article.

Lorsque vous choisissez les API à utiliser dans un scénario donné, tenez compte de la charge de travail et des besoins de votre application, ainsi que des problèmes connus et de l’impact de HNS sur les charges de travail et les applications.

Se connecter au compte

Pour utiliser les extraits de code de cet article, vous devez créer une instance DataLakeServiceClient qui représente le compte de stockage.

Se connecter à l’aide de Microsoft Entra ID

Vous pouvez utiliser la bibliothèque de client Azure Identity pour JS afin d’authentifier votre application auprès de Microsoft Entra ID.

Créez une instance DataLakeServiceClient et transmettez une nouvelle instance de la classe DefaultAzureCredential.

function GetDataLakeServiceClientAD(accountName) {

  const dataLakeServiceClient = new DataLakeServiceClient(
      `https://${accountName}.dfs.core.windows.net`,
      new DefaultAzureCredential());

  return dataLakeServiceClient;
}

Pour en savoir plus sur l’utilisation de DefaultAzureCredential pour autoriser l’accès aux données, consultez Vue d’ensemble : authentifier des applications JavaScript auprès d’Azure à l’aide du kit de développement logiciel (SDK) Azure.

Connexion avec une clé de compte

Vous pouvez autoriser l’accès aux données en utilisant des clés d’accès de votre compte (clé partagée). Cet exemple crée une instance DataLakeServiceClient qui est autorisée avec la clé de compte.


function GetDataLakeServiceClient(accountName, accountKey) {

  const sharedKeyCredential =
     new StorageSharedKeyCredential(accountName, accountKey);

  const dataLakeServiceClient = new DataLakeServiceClient(
      `https://${accountName}.dfs.core.windows.net`, sharedKeyCredential);

  return dataLakeServiceClient;
}

Cette méthode d'autorisation ne fonctionne que pour les applications Node.js. Si vous prévoyez d’exécuter votre code dans un navigateur, vous pouvez l’autoriser à l’aide de Microsoft Entra ID.

Attention

L’autorisation avec une clé partagée n’est pas recommandée, car elle peut être moins sécurisée. Pour une sécurité optimale, désactivez l’autorisation via une clé partagée pour votre compte de stockage, comme décrit dans Empêcher l’autorisation avec clé partagée pour un compte de stockage Azure.

L’utilisation de clés d’accès et de chaînes de connexion doit être limitée aux applications de preuve de concept initiales ou aux prototypes de développement qui n’accèdent pas aux données de production ou aux données sensibles. Sinon, les classes d’authentification basées sur des jetons disponibles dans le kit de développement logiciel (SDK) Azure doivent toujours être priorisées lors de l’authentification auprès de ressources Azure.

Microsoft recommande aux clients d’utiliser Microsoft Entra ID ou une signature d’accès partagé (SAP) pour autoriser l’accès aux données dans le service Stockage Azure. Pour en savoir plus, consultez Autoriser les opérations pour l’accès aux données.

Créez un conteneur.

Un conteneur fait office de système de fichiers pour vos fichiers. Pour en créer un, procurez-vous une instance de FileSystemClient, puis appelez la méthode FileSystemClient.Create.

Cet exemple crée un conteneur nommé my-file-system.

async function CreateFileSystem(dataLakeServiceClient) {

  const fileSystemName = "my-file-system";

  const fileSystemClient = dataLakeServiceClient.getFileSystemClient(fileSystemName);

  const createResponse = await fileSystemClient.create();

}

Créer un répertoire

Pour créer une référence de répertoire, procurez-vous une instance de DirectoryClient, puis appelez la méthode DirectoryClient.create.

Cet exemple ajoute un répertoire nommé my-directory à un conteneur.

async function CreateDirectory(fileSystemClient) {

  const directoryClient = fileSystemClient.getDirectoryClient("my-directory");

  await directoryClient.create();

}

Renommer ou déplacer un répertoire

Renommez ou déplacez un répertoire en appelant la méthode DirectoryClient.rename. Transmettez un paramètre au chemin d’accès du répertoire souhaité.

Cet exemple renomme un sous-répertoire avec le nom my-directory-renamed.

async function RenameDirectory(fileSystemClient) {

  const directoryClient = fileSystemClient.getDirectoryClient("my-directory");
  await directoryClient.move("my-directory-renamed");

}

Cet exemple déplace un répertoire nommé my-directory-renamed vers un sous-répertoire d’un répertoire nommé my-directory-2.

async function MoveDirectory(fileSystemClient) {

  const directoryClient = fileSystemClient.getDirectoryClient("my-directory-renamed");
  await directoryClient.move("my-directory-2/my-directory-renamed");

}

Supprimer un répertoire

Supprimez un répertoire en appelant la méthode DirectoryClient.delete.

Cet exemple supprime un répertoire nommé my-directory.

async function DeleteDirectory(fileSystemClient) {

  const directoryClient = fileSystemClient.getDirectoryClient("my-directory");
  await directoryClient.delete();

}

Charger un fichier dans un répertoire

Tout d'abord, lisez un fichier. L'exemple suivant utilise le module Node.js fs. Créez ensuite une référence de fichier dans le répertoire cible en créant une instance de FileClient, puis en appelant la méthode FileClient.create. Téléchargez un fichier en appelant la méthode FileClient.append. Veillez à procéder au chargement en appelant la méthode FileClient.flush.

Cet exemple télécharge un fichier texte dans un répertoire nommé my-directory.

async function UploadFile(fileSystemClient) {

  const fs = require('fs')

  var content = "";

  fs.readFile('mytestfile.txt', (err, data) => {
      if (err) throw err;

      content = data.toString();

  })

  const fileClient = fileSystemClient.getFileClient("my-directory/uploaded-file.txt");
  await fileClient.create();
  await fileClient.append(content, 0, content.length);
  await fileClient.flush(content.length);

}

Télécharger à partir d’un répertoire

Tout d'abord, créez une instance de FileSystemClient représentant le fichier que vous souhaitez télécharger. Utilisez la méthode FileSystemClient.read pour lire le fichier. Ensuite, écrivez le fichier. L'exemple utilise le module Node.js fs pour effectuer cette opération.

Notes

Cette méthode de téléchargement de fichier ne fonctionne que pour les applications Node.js. Si vous prévoyez d'exécuter votre code dans un navigateur, consultez le fichier Lisez-moi de la bibliothèque de client Azure Storage File Data Lake pour JavaScript pour connaître la procédure à suivre dans un navigateur.

async function DownloadFile(fileSystemClient) {

  const fileClient = fileSystemClient.getFileClient("my-directory/uploaded-file.txt");

  const downloadResponse = await fileClient.read();

  const downloaded = await streamToString(downloadResponse.readableStreamBody);

  async function streamToString(readableStream) {
    return new Promise((resolve, reject) => {
      const chunks = [];
      readableStream.on("data", (data) => {
        chunks.push(data.toString());
      });
      readableStream.on("end", () => {
        resolve(chunks.join(""));
      });
      readableStream.on("error", reject);
    });
  }

  const fs = require('fs');

  fs.writeFile('mytestfiledownloaded.txt', downloaded, (err) => {
    if (err) throw err;
  });
}

Afficher le contenu du répertoire

Cet exemple imprime les noms des répertoires et fichiers situés dans un répertoire nommé my-directory.

async function ListFilesInDirectory(fileSystemClient) {

  let i = 1;

  let iter = await fileSystemClient.listPaths({path: "my-directory", recursive: true});

  for await (const path of iter) {

    console.log(`Path ${i++}: ${path.name}, is directory: ${path.isDirectory}`);
  }

}

Voir aussi