Utilize o JavaScript SDK em Node.js para gerir diretórios e ficheiros em Azure Data Lake Storage Gen2Use JavaScript SDK in Node.js to manage directories and files in Azure Data Lake Storage Gen2

Este artigo mostra-lhe como usar Node.js para criar e gerir diretórios e ficheiros em contas de armazenamento que têm um espaço hierárquico de nomes.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 saber como obter, definir e atualizar as listas de controlo de acesso (ACL) de diretórios e ficheiros, consulte Use JavaScript SDK em Node.js para gerir ACLs em 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.

Pacote (Gestor de Pacotes de Nó) | Amostras | Dar feedbackPackage (Node Package Manager) | Samples | Give Feedback

Pré-requisitosPrerequisites

  • Uma subscrição do Azure.An Azure subscription. Consulte Obter versão de avaliação gratuita do Azure.See Get Azure free trial.

  • Uma conta de armazenamento que tem espaço hierárquico habilitado.A storage account that has hierarchical namespace enabled. Siga estas instruções para criar uma.Follow these instructions to create one.

  • Se estiver a utilizar este pacote numa aplicação Node.js, terá de Node.js 8.0.0 ou superior.If you are using this package in a Node.js application, you'll need Node.js 8.0.0 or higher.

Configurar o seu projetoSet up your project

Instale a biblioteca do cliente do Data Lake para o JavaScript abrindo uma janela de terminal e, em seguida, digitando o seguinte 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 o storage-file-datalake pacote colocando esta declaração no topo do seu ficheiro 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");

Ligar à contaConnect to the account

Para utilizar os snippets neste artigo, terá de criar uma instância DataLakeServiceClient que represente a conta de armazenamento.To use the snippets in this article, you'll need to create a DataLakeServiceClient instance that represents the storage account.

Conecte-se usando uma chave de contaConnect by using an account key

Esta é a maneira mais fácil de ligar a uma conta.This is the easiest way to connect to an account.

Este exemplo cria uma instância DataLakeServiceClient utilizando uma chave de conta.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 autorização funciona apenas para Node.js pedidos.This method of authorization works only for Node.js applications. Se planeia executar o seu código num browser, pode autorizar utilizando o Azure Ative Directory (Azure AD).If you plan to run your code in a browser, you can authorize by using Azure Active Directory (Azure AD).

Conecte-se utilizando o Azure Ative Directory (Azure AD)Connect by using Azure Active Directory (Azure AD)

Pode utilizar a biblioteca de clientes de identidade Azure para jS para autenticar a sua aplicação com Azure AD.You can use the Azure identity client library for JS to authenticate your application with Azure AD.

Este exemplo cria um exemplo de DataLakeServiceClient usando um ID de cliente, um segredo de cliente e uma identificação de inquilino.This example creates a DataLakeServiceClient instance by using a client ID, a client secret, and a tenant ID. Para obter estes valores, consulte Adquirir um token da Azure AD para autorizar pedidos de uma aplicação do 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 mais exemplos, consulte a biblioteca de clientes de identidade Azure para obter documentação JS.For more examples, see the Azure identity client library for JS documentation.

Criar um contentorCreate a container

Um contentor funciona como um sistema de ficheiros para os seus ficheiros.A container acts as a file system for your files. Pode criar um através de uma instância FileSystemClient e, em seguida, ligar para o método FileSystemClient.Create.You can create one by getting a FileSystemClient instance, and then calling the FileSystemClient.Create method.

Este exemplo cria um recipiente chamado 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();
        
}

Criar um diretórioCreate a directory

Crie uma referência de diretório obtendo uma instância de Diretório e, em seguida, chamando o método DirectoryClient.create.Create a directory reference by getting a DirectoryClient instance, and then calling the DirectoryClient.create method.

Este exemplo adiciona um diretório nomeado my-directory a um contentor.This example adds a directory named my-directory to a container.

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

}

Mudar de nome ou mover um diretórioRename or move a directory

Mude o nome ou mova um diretório chamando o método DirectoryClient.rename.Rename or move a directory by calling the DirectoryClient.rename method. Passe o caminho do diretório desejado um parâmetro.Pass the path of the desired directory a parameter.

Este exemplo renomea um sub-diretório para o nome 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");

}

Este exemplo move um diretório nomeado my-directory-renamed para um sub-diretório de um diretório chamado 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");      

}

Eliminar um diretórioDelete a directory

Elimine um diretório chamando o método Diretório.delete.Delete a directory by calling the DirectoryClient.delete method.

Este exemplo elimina um diretório chamado my-directory .This example deletes a directory named my-directory.

async function DeleteDirectory(fileSystemClient) {

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

}

Faça o upload de um ficheiro para um diretórioUpload a file to a directory

Primeiro, leia um ficheiro.First, read a file. Este exemplo utiliza o fs módulo Node.js.This example uses the Node.js fs module. Em seguida, crie uma referência de ficheiro no directório-alvo criando uma instância FileClient e, em seguida, chamando o 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. Faça o upload de um ficheiro chamando o método FileClient.append.Upload a file by calling the FileClient.append method. Certifique-se de que completa o upload ligando para o método FileClient.flush.Make sure to complete the upload by calling the FileClient.flush method.

Este exemplo envia um ficheiro de texto para um diretório chamado 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);

}

Descarregue a partir de um diretórioDownload from a directory

Em primeiro lugar, crie uma instância FileSystemClient que represente o ficheiro que pretende descarregar.First, create a FileSystemClient instance that represents the file that you want to download. Utilize o método FileSystemClient.read para ler o ficheiro.Use the FileSystemClient.read method to read the file. Então, escreva o ficheiro.Then, write the file. Este exemplo utiliza o módulo Node.js fs para o fazer.This example uses the Node.js fs module to do that.

Nota

Este método de descarregar um ficheiro funciona apenas para aplicações Node.js.This method of downloading a file works only for Node.js applications. Se planeia executar o seu código num browser, consulte a biblioteca de clientes do Azure Storage File Data Lake para o ficheiro de leitura JavaScript, para um exemplo de como fazê-lo num browser.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;
  });
}

Listar conteúdo do diretórioList directory contents

Este exemplo, imprime os nomes de cada diretório e arquivo que está localizado num diretório 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}`);
  }

}

Ver tambémSee also