Usare JavaScript SDK in Node.js per gestire directory e file in Azure Data Lake Storage Gen2Use JavaScript SDK in Node.js to manage directories and files in Azure Data Lake Storage Gen2

Questo articolo illustra come usare Node.js per creare e gestire directory e file in account di archiviazione che hanno uno spazio dei nomi gerarchico.This article shows you how to use Node.js to create and manage directories and files in storage accounts that have a hierarchical namespace.

Per informazioni su come ottenere, impostare e aggiornare gli elenchi di controllo di accesso (ACL) di directory e file, vedere usare JavaScript SDK in Node.js per gestire gli ACL in 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.

Pacchetto (gestione pacchetti di nodi) | Esempi | di Invia commenti e suggerimentiPackage (Node Package Manager) | Samples | Give Feedback

PrerequisitiPrerequisites

  • Una sottoscrizione di Azure.An Azure subscription. Vedere Ottenere una versione di prova gratuita di Azure.See Get Azure free trial.

  • Un account di archiviazione in cui è abilitato lo spazio dei nomi gerarchico.A storage account that has hierarchical namespace enabled. Per crearne uno, seguire queste istruzioni.Follow these instructions to create one.

  • Se si usa questo pacchetto in un'applicazione Node.js, sarà necessario Node.js 8.0.0 o versione successiva.If you are using this package in a Node.js application, you'll need Node.js 8.0.0 or higher.

Configurare il progettoSet up your project

Installare Data Lake libreria client per JavaScript aprendo una finestra del terminale e digitando il comando seguente.Install Data Lake client library for JavaScript by opening a terminal window, and then typing the following command.

npm install @azure/storage-file-datalake

Importare il storage-file-datalake pacchetto inserendo questa istruzione all'inizio del file di codice.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");

Effettuare la connessione all'accountConnect to the account

Per usare i frammenti di codice in questo articolo, è necessario creare un'istanza di DataLakeServiceClient che rappresenta l'account di archiviazione.To use the snippets in this article, you'll need to create a DataLakeServiceClient instance that represents the storage account.

Connettersi tramite una chiave dell'accountConnect by using an account key

Questo è il modo più semplice per connettersi a un account.This is the easiest way to connect to an account.

Questo esempio crea un'istanza di DataLakeServiceClient usando una chiave dell'account.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

Questo metodo di autorizzazione funziona solo per applicazioni Node.js.This method of authorization works only for Node.js applications. Se si prevede di eseguire il codice in un browser, è possibile autorizzare usando 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).

Connettersi tramite Azure Active Directory (Azure AD)Connect by using Azure Active Directory (Azure AD)

È possibile usare la libreria client Azure Identity per JS per autenticare l'applicazione con Azure ad.You can use the Azure identity client library for JS to authenticate your application with Azure AD.

Questo esempio crea un'istanza di DataLakeServiceClient usando un ID client, un segreto client e un ID tenant.This example creates a DataLakeServiceClient instance by using a client ID, a client secret, and a tenant ID. Per ottenere questi valori, vedere acquisizione di un token da Azure ad per l'autorizzazione delle richieste da un'applicazione client.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

Per altri esempi, vedere la documentazione della libreria client Azure Identity per JS .For more examples, see the Azure identity client library for JS documentation.

Creare un contenitoreCreate a container

Un contenitore funge da file system per i file.A container acts as a file system for your files. È possibile crearne uno ottenendo un'istanza di FileSystemClient e quindi chiamando il metodo FileSystemClient. Create .You can create one by getting a FileSystemClient instance, and then calling the FileSystemClient.Create method.

Questo esempio crea un contenitore denominato 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();
        
}

Creare una directoryCreate a directory

Creare un riferimento alla directory ottenendo un'istanza di DirectoryClient e quindi chiamando il metodo DirectoryClient. Create .Create a directory reference by getting a DirectoryClient instance, and then calling the DirectoryClient.create method.

In questo esempio viene aggiunta una directory denominata my-directory a un contenitore.This example adds a directory named my-directory to a container.

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

}

Rinominare o spostare una directoryRename or move a directory

Rinominare o spostare una directory chiamando il metodo DirectoryClient. Rename .Rename or move a directory by calling the DirectoryClient.rename method. Passare il percorso della directory desiderata a un parametro.Pass the path of the desired directory a parameter.

Questo esempio rinomina una sottodirectory con il 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");

}

In questo esempio viene spostata una directory denominata my-directory-renamed in una sottodirectory di una directory denominata 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");      

}

Eliminare una directoryDelete a directory

Eliminare una directory chiamando il metodo DirectoryClient. Delete .Delete a directory by calling the DirectoryClient.delete method.

Questo esempio illustra come eliminare una directory denominata my-directory.This example deletes a directory named my-directory.

async function DeleteDirectory(fileSystemClient) {

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

}

Caricare un file in una directoryUpload a file to a directory

Prima di tutto, leggere un file.First, read a file. Questo esempio usa il fs modulo Node.js.This example uses the Node.js fs module. Quindi, creare un riferimento a un file nella directory di destinazione creando un'istanza fileclient e chiamando il metodo fileclient. Create .Then, create a file reference in the target directory by creating a FileClient instance, and then calling the FileClient.create method. Caricare un file chiamando il metodo fileclient. Append .Upload a file by calling the FileClient.append method. Assicurarsi di completare il caricamento chiamando il metodo fileclient. Flush .Make sure to complete the upload by calling the FileClient.flush method.

Questo esempio consente di caricare un file di testo in una directory denominata 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);

}

Scaricare da una directoryDownload from a directory

Per prima cosa, creare un'istanza di FileSystemClient che rappresenti il file che si desidera scaricare.First, create a FileSystemClient instance that represents the file that you want to download. Usare il metodo FileSystemClient. Read per leggere il file.Use the FileSystemClient.read method to read the file. Quindi, scrivere il file.Then, write the file. Questo esempio usa il fs modulo Node.js per eseguire questa operazione.This example uses the Node.js fs module to do that.

Nota

Questo metodo di download di un file funziona solo per le applicazioni Node.js.This method of downloading a file works only for Node.js applications. Se si prevede di eseguire il codice in un browser, vedere il file Leggimi del file di archiviazione di Azure Data Lake libreria client per JavaScript per un esempio di come eseguire questa operazione in un 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;
  });
}

Elencare il contenuto della directoryList directory contents

In questo esempio vengono stampati i nomi di ogni directory e file che si trova in una directory denominata 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}`);
  }

}

Vedi ancheSee also