Uso de JavaScript en Node.js para administrar directorios y archivos en Azure Data Lake Storage Gen2Use JavaScript SDK in Node.js to manage directories and files in Azure Data Lake Storage Gen2

En este artículo se explica cómo usar Node.js para crear y administrar directorios y archivos en cuentas de almacenamiento que tengan habilitado un espacio de nombres jerárquico.This article shows you how to use Node.js to create and manage directories and files in storage accounts that have a hierarchical namespace.

Para obtener información sobre cómo obtener, establecer y actualizar las listas de control de acceso (ACL) de directorios y archivos, consulte Uso del SDK de JavaScript en Node.js para administrar listas de control de acceso en Azure Data Lake Storage Gen2.To learn about how to get, set, and update the access control lists (ACL) of directories and files, see Use JavaScript SDK in Node.js to manage ACLs in Azure Data Lake Storage Gen2.

Paquete (Administrador de paquetes de Node) | Ejemplos | Enviar comentariosPackage (Node Package Manager) | Samples | Give Feedback

Requisitos previosPrerequisites

  • Suscripción a Azure.An Azure subscription. Consulte Obtención de una versión de evaluación gratuita.See Get Azure free trial.

  • Una cuenta de almacenamiento que tenga habilitado un espacio de nombres jerárquico.A storage account that has hierarchical namespace enabled. Siga estas instrucciones para crear uno.Follow these instructions to create one.

  • Si utiliza este paquete en una aplicación de Node.js, necesitará Node.js 8.0.0 o una versión posterior.If you are using this package in a Node.js application, you'll need Node.js 8.0.0 or higher.

Configurar su proyectoSet up your project

Instale la biblioteca cliente de Data Lake para JavaScript; para ello, abra una ventana de terminal y, a continuación, escriba el siguiente comando.Install Data Lake client library for JavaScript by opening a terminal window, and then typing the following command.

npm install @azure/storage-file-datalake

Importe el paquete storage-file-datalake colocando esta instrucción en la parte superior del archivo de código.Import the storage-file-datalake package by placing this statement at the top of your code file.

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

Conexión con la cuentaConnect to the account

Para usar los fragmentos de código de este artículo, tiene que crear una instancia de DataLakeServiceClient que represente la cuenta de almacenamiento.To use the snippets in this article, you'll need to create a DataLakeServiceClient instance that represents the storage account.

Conexión con una clave de cuentaConnect by using an account key

Es la manera más sencilla de conectarse a una cuenta.This is the easiest way to connect to an account.

En este ejemplo se crea una instancia de DataLakeServiceClient con una clave de cuenta.This example creates a DataLakeServiceClient instance by using an account key.


function GetDataLakeServiceClient(accountName, accountKey) {

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

  return datalakeServiceClient;             
}      

Nota

Este método de autorización solo funciona para aplicaciones de Node.js.This method of authorization works only for Node.js applications. Si tiene previsto ejecutar el código en un explorador, se puede autorizar mediante Azure Active Directory (Azure AD).If you plan to run your code in a browser, you can authorize by using Azure Active Directory (Azure AD).

Conexión con Azure Active Directory (Azure AD)Connect by using Azure Active Directory (Azure AD)

Puede usar la biblioteca cliente de Azure Identity para JS para autenticar la aplicación con Azure AD.You can use the Azure identity client library for JS to authenticate your application with Azure AD.

En este ejemplo se crea una instancia de DataLakeServiceClient con un identificador de cliente, un secreto de cliente y un identificador de inquilino.This example creates a DataLakeServiceClient instance by using a client ID, a client secret, and a tenant ID. Para obtener estos valores, consulte Adquisición de un token de Azure AD para la autorización de solicitudes desde una aplicación cliente.To get these values, see Acquire a token from Azure AD for authorizing requests from a client application.

function GetDataLakeServiceClientAD(accountName, clientID, clientSecret, tenantID) {

  const credential = new ClientSecretCredential(tenantID, clientID, clientSecret);
  
  const datalakeServiceClient = new DataLakeServiceClient(
      `https://${accountName}.dfs.core.windows.net`, credential);

  return datalakeServiceClient;             
}

Nota

Para ver más ejemplos, consulte la documentación de Biblioteca cliente de Azure Identity para JS.For more examples, see the Azure identity client library for JS documentation.

Crear un contenedorCreate a container

Un contenedor actúa como sistema de archivos para sus archivos.A container acts as a file system for your files. Puede crear uno mediante la obtención de una instancia de FileSystemClient y, a continuación, llamar al método FileSystemClient.Create.You can create one by getting a FileSystemClient instance, and then calling the FileSystemClient.Create method.

En este ejemplo se crea un contenedor denominado my-file-system.This example creates a container named my-file-system.

async function CreateFileSystem(datalakeServiceClient) {

  const fileSystemName = "my-file-system";
  
  const fileSystemClient = datalakeServiceClient.getFileSystemClient(fileSystemName);

  const createResponse = await fileSystemClient.create();
        
}

Creación de un directorioCreate a directory

Cree una referencia de directorio obteniendo una instancia de DirectoryClient y, a continuación, llame al método DirectoryClient.create.Create a directory reference by getting a DirectoryClient instance, and then calling the DirectoryClient.create method.

En este ejemplo se agrega un directorio denominado my-directory a un contenedor.This example adds a directory named my-directory to a container.

async function CreateDirectory(fileSystemClient) {
   
  const directoryClient = fileSystemClient.getDirectoryClient("my-directory");
  
  await directoryClient.create();

}

Cambio de nombre o traslado de un directorioRename or move a directory

Cambie el nombre de un directorio o muévalo llamando al método DirectoryClient.rename.Rename or move a directory by calling the DirectoryClient.rename method. Pase la ruta de acceso del directorio que busca a un parámetro.Pass the path of the desired directory a parameter.

En este ejemplo se cambia el nombre de un subdirectorio a my-directory-renamed.This example renames a sub-directory to the name my-directory-renamed.

async function RenameDirectory(fileSystemClient) {

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

}

En este ejemplo se mueve un directorio denominado my-directory-renamed a un subdirectorio de un directorio denominado my-directory-2.This example moves a directory named my-directory-renamed to a sub-directory of a directory named my-directory-2.

async function MoveDirectory(fileSystemClient) {

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

}

Eliminación de un directorioDelete a directory

Elimine un directorio llamando al método DirectoryClient.delete.Delete a directory by calling the DirectoryClient.delete method.

En este ejemplo se elimina un directorio denominado my-directory.This example deletes a directory named my-directory.

async function DeleteDirectory(fileSystemClient) {

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

}

Carga de un archivo en un directorioUpload a file to a directory

Primero, lea un archivoFirst, read a file. En este ejemplo se usa el módulo fs de Node.js.This example uses the Node.js fs module. A continuación, cree una referencia de archivo en el directorio de destino creando una instancia de FileClient y, a continuación, llamando al método FileClient.create.Then, create a file reference in the target directory by creating a FileClient instance, and then calling the FileClient.create method. Cargue un archivo llamando al método FileClient.append.Upload a file by calling the FileClient.append method. Asegúrese de completar la carga llamando al método FileClient.flush.Make sure to complete the upload by calling the FileClient.flush method.

En este ejemplo se carga un archivo de texto en un directorio denominado my-directory.This example uploads a text file to a directory named 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);

}

Descarga de un directorioDownload from a directory

En primer lugar, cree una instancia de FileSystemClient que represente al archivo que quiere descargar.First, create a FileSystemClient instance that represents the file that you want to download. Use el método FileSystemClient.read para leer el archivo.Use the FileSystemClient.read method to read the file. A continuación, escriba el archivo.Then, write the file. En este ejemplo se usa el módulo fs de Node.js para ello.This example uses the Node.js fs module to do that.

Nota

Este método de descarga de un archivo solo funciona para aplicaciones de Node.js.This method of downloading a file works only for Node.js applications. Si tiene previsto ejecutar el código en un explorador, consulte el archivo Léame de Azure Storage File Data Lake client library for JavaScript para obtener un ejemplo de cómo hacerlo en un explorador.If you plan to run your code in a browser, see the Azure Storage File Data Lake client library for JavaScript readme file for an example of how to do this in a browser.

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

Lista del contenido del directorioList directory contents

En este ejemplo se imprimen los nombres de cada directorio y archivo que se encuentra en un directorio denominado my-directory.This example, prints the names of each directory and file that is located in a directory named 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}`);
  }

}

Consulte tambiénSee also