JavaScript SDK gebruiken in Node.js voor het beheren van mappen en bestanden in Azure Data Lake Storage Gen2

In dit artikel leest u hoe u Node.js kunt gebruiken om mappen en bestanden te maken en beheren in opslagaccounts met een hiërarchische naamruimte.

Zie JavaScript SDK gebruiken in Node.js voor het beheren van ACL's in Azure Data Lake Storage Gen2 voor meer informatie over het ophalen, instellen en bijwerken van de toegangsbeheerlijsten (ACL's).

Pakketvoorbeelden (Node Pakketbeheer)Feedback | | geven

Vereisten

  • Een Azure-abonnement. Zie Gratis proefversie van Azure downloaden voor meer informatie.

  • Een opslagaccount waarvoor hiërarchische naamruimte is ingeschakeld. Volg deze instructies om er een te maken.

  • Als u dit pakket in een Node.js toepassing gebruikt, hebt u Node.js 8.0.0 of hoger nodig.

Uw project instellen

Installeer de Data Lake-clientbibliotheek voor JavaScript door een terminalvenster te openen en vervolgens de volgende opdracht te typen.

npm install @azure/storage-file-datalake

Importeer het storage-file-datalake pakket door deze instructie boven aan het codebestand te plaatsen.

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

Notitie

Met toegang tot meerdere protocollen in Data Lake Storage kunnen toepassingen zowel Blob-API's als Data Lake Storage Gen2-API's gebruiken om te werken met gegevens in opslagaccounts waarvoor HNS (hiërarchische naamruimte) is ingeschakeld. Wanneer u werkt met mogelijkheden die uniek zijn voor Data Lake Storage Gen2, zoals adreslijstbewerkingen en ACL's, gebruikt u de Data Lake Storage Gen2-API's, zoals wordt weergegeven in dit artikel.

Wanneer u kiest welke API's in een bepaald scenario moeten worden gebruikt, moet u rekening houden met de workload en de behoeften van uw toepassing, samen met de bekende problemen en impact van HNS op workloads en toepassingen.

Verbinding maken naar het account

Als u de fragmenten in dit artikel wilt gebruiken, moet u een DataLakeServiceClient-exemplaar maken dat het opslagaccount vertegenwoordigt.

Verbinding maken met behulp van Microsoft Entra-id

U kunt de Azure Identity-clientbibliotheek voor JS gebruiken om uw toepassing te verifiëren met Microsoft Entra-id.

Maak een DataLakeServiceClient-exemplaar en geef een nieuw exemplaar van de klasse DefaultAzureCredential door .

function GetDataLakeServiceClientAD(accountName) {

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

  return dataLakeServiceClient;
}

Zie Overzicht: JavaScript-apps verifiëren bij Azure met behulp van de Azure SDK voor meer informatie over het gebruik van DefaultAzureCredential om toegang tot gegevens te autoriseren.

Verbinding maken met behulp van een accountsleutel

U kunt toegang tot gegevens autoriseren met behulp van uw accounttoegangssleutels (gedeelde sleutel). In dit voorbeeld wordt een DataLakeServiceClient-exemplaar gemaakt dat is geautoriseerd met de accountsleutel.


function GetDataLakeServiceClient(accountName, accountKey) {

  const sharedKeyCredential =
     new StorageSharedKeyCredential(accountName, accountKey);

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

  return dataLakeServiceClient;
}

Deze autorisatiemethode werkt alleen voor Node.js toepassingen. Als u van plan bent om uw code in een browser uit te voeren, kunt u autoriseren met behulp van Microsoft Entra-id.

Let op

Autorisatie met gedeelde sleutel wordt niet aanbevolen omdat deze mogelijk minder veilig is. Schakel voor optimale beveiliging autorisatie uit via een gedeelde sleutel voor uw opslagaccount, zoals beschreven in Autorisatie van gedeelde sleutels voorkomen voor een Azure Storage-account.

Het gebruik van toegangssleutels en verbindingsreeks s moet worden beperkt tot het eerste bewijs van concept-apps of prototypen voor ontwikkeling die geen toegang hebben tot productie- of gevoelige gegevens. Anders moeten de verificatieklassen op basis van tokens die beschikbaar zijn in de Azure SDK altijd de voorkeur krijgen bij het verifiëren bij Azure-resources.

Microsoft raadt aan dat clients Microsoft Entra ID of sas (Shared Access Signature) gebruiken om toegang tot gegevens in Azure Storage te autoriseren. Zie Bewerkingen autoriseren voor gegevenstoegang voor meer informatie.

Een container maken

Een container fungeert als een bestandssysteem voor uw bestanden. U kunt er een maken door een FileSystemClient-exemplaar op te halen en vervolgens de methode FileSystemClient.Create aan te roepen.

In dit voorbeeld wordt een container gemaakt met de naam my-file-system.

async function CreateFileSystem(dataLakeServiceClient) {

  const fileSystemName = "my-file-system";

  const fileSystemClient = dataLakeServiceClient.getFileSystemClient(fileSystemName);

  const createResponse = await fileSystemClient.create();

}

Een map maken

Maak een mapreferentie door een DirectoryClient-exemplaar op te halen en vervolgens de methode DirectoryClient.create aan te roepen.

In dit voorbeeld wordt een map met de naam my-directory toegevoegd aan een container.

async function CreateDirectory(fileSystemClient) {

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

  await directoryClient.create();

}

De naam van een map wijzigen of verplaatsen

Wijzig de naam van een map of verplaats deze door de methode DirectoryClient.rename aan te roepen. Geef het pad door van de gewenste map een parameter.

In dit voorbeeld wordt de naam van een submap gewijzigd in de naam my-directory-renamed.

async function RenameDirectory(fileSystemClient) {

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

}

In dit voorbeeld wordt een map met de naam my-directory-renamed verplaatst naar een submap van een map met de naam my-directory-2.

async function MoveDirectory(fileSystemClient) {

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

}

Een directory verwijderen

Verwijder een map door de methode DirectoryClient.delete aan te roepen.

In dit voorbeeld wordt een map met de naam my-directoryverwijderd.

async function DeleteDirectory(fileSystemClient) {

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

}

Een bestand uploaden naar een map

Lees eerst een bestand. In dit voorbeeld wordt de module Node.js fs gebruikt. Maak vervolgens een bestandsreferentie in de doelmap door een FileClient-exemplaar te maken en vervolgens de methode FileClient.create aan te roepen. Upload een bestand door de methode FileClient.append aan te roepen. Zorg ervoor dat u het uploaden voltooit door de methode FileClient.flush aan te roepen.

In dit voorbeeld wordt een tekstbestand geüpload naar een map met de naam 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);

}

Downloaden uit een map

Maak eerst een FileSystemClient-exemplaar dat het bestand vertegenwoordigt dat u wilt downloaden. Gebruik de methode FileSystemClient.read om het bestand te lezen. Schrijf vervolgens het bestand. In dit voorbeeld wordt de Node.js-module fs gebruikt om dat te doen.

Notitie

Deze methode voor het downloaden van een bestand werkt alleen voor Node.js toepassingen. Als u van plan bent om uw code in een browser uit te voeren, raadpleegt u de Azure Storage File Data Lake-clientbibliotheek voor javaScript-leesmij-bestand voor een voorbeeld van hoe u dit doet in een 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;
  });
}

Mapinhoud weergeven

In dit voorbeeld worden de namen van elke map en elk bestand afgedrukt dat zich in een map met de naam my-directorybevindt.

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

}

Zie ook