Verwalten von Verzeichnissen und Dateien in Azure Data Lake Storage mit dem JavaScript-SDK in Node.js

In diesem Artikel erfahren Sie, wie Sie mithilfe von Node.js Verzeichnisse und Dateien in Speicherkonten erstellen und verwalten, die über einen hierarchischen Namespace verfügen.

Weitere Informationen zum Abrufen, Festlegen und Aktualisieren der Zugriffssteuerungslisten (Access Control Lists, ACLs) von Verzeichnissen und Dateien finden Sie unter Verwalten von Zugriffssteuerungslisten in Azure Data Lake Storage mit dem JavaScript-SDK in Node.js.

Paket (Node Package Manager) | Beispiele | Feedback geben

Voraussetzungen

  • Ein Azure-Abonnement. Weitere Informationen finden Sie unter Kostenlose Azure-Testversion.

  • Ein Speicherkonto, für das der hierarchische Namespace aktiviert ist. Befolgen Sie diese Anleitung für die Erstellung.

  • Wenn Sie dieses Paket in einer Node.js-Anwendung verwenden, benötigen Sie Node.js 8.0.0 oder höher.

Einrichten des Projekts

Installieren Sie die Data Lake-Clientbibliothek für JavaScript, indem Sie ein Terminalfenster öffnen und den folgenden Befehl eingeben.

npm install @azure/storage-file-datalake

Importieren Sie das storage-file-datalake-Paket, indem Sie die folgende Anweisung oben in Ihrer Codedatei einfügen.

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

Hinweis

Der Multiprotokollzugriff auf Data Lake Storage ermöglicht Anwendungen die Verwendung von Blob-APIs und Data Lake Storage Gen2-APIs zum Arbeiten mit Daten in Speicherkonten mit aktiviertem hierarchischen Namespace (HNS). Wenn Sie mit speziellen Funktionen für Data Lake Storage Gen2 arbeiten, z. B. Verzeichnisvorgängen und ACLs, verwenden Sie die Data Lake Storage Gen2-APIs, wie in diesem Artikel gezeigt.

Berücksichtigen Sie bei der Auswahl der APIs, die in einem bestimmten Szenario verwendet werden sollen, die Workload und die Anforderungen Ihrer Anwendung sowie die bekannten Probleme und die Auswirkungen eines HNS auf Workloads und Anwendungen.

Herstellen einer Verbindung mit dem Konto

Wenn Sie die Codeausschnitte in diesem Artikel verwenden möchten, müssen Sie eine DataLakeServiceClient-Instanz erstellen, die das Speicherkonto darstellt.

Herstellen einer Verbindung mithilfe von Microsoft Entra ID

Sie können die Azure-Identitätsclientbibliothek für JS verwenden, um Ihre Anwendung bei Microsoft Entra ID zu authentifizieren.

Erstellen Sie eine DataLakeServiceClient-Instanz und übergeben Sie eine neue Instanz der DefaultAzureCredential-Klasse.

function GetDataLakeServiceClientAD(accountName) {

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

  return dataLakeServiceClient;
}

Weitere Informationen zur Verwendung von DefaultAzureCredential zum Autorisieren des Datenzugriffs finden Sie unter Übersicht: Authentifizieren von JavaScript-Apps bei Azure mithilfe des Azure SDK.

Herstellen einer Verbindung per Kontoschlüssel

Sie können den Zugriff auf Daten mithilfe Ihrer Kontozugriffsschlüssel (Gemeinsam verwendeter Schlüssel) autorisieren. In diesem Beispiel wird eine DataLakeServiceClient-Instanz erstellt, die mit dem Kontoschlüssel autorisiert ist.


function GetDataLakeServiceClient(accountName, accountKey) {

  const sharedKeyCredential =
     new StorageSharedKeyCredential(accountName, accountKey);

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

  return dataLakeServiceClient;
}

Diese Autorisierungsmethode funktioniert nur für Node.js-Anwendungen. Wenn Sie beabsichtigen, Ihren Code in einem Browser auszuführen, können Sie mithilfe von Microsoft Entra ID autorisieren.

Achtung

Eine Autorisierung mit einem gemeinsam verwendeten Schlüssel wird nicht empfohlen, da sie möglicherweise weniger sicher ist. Um optimale Sicherheit zu gewährleisten, deaktivieren Sie die Autorisierung über gemeinsam genutzten Schlüssel für Ihr Speicherkonto. Eine Anleitung finden Sie unter Verhindern der Autorisierung mit gemeinsam verwendeten Schlüsseln für ein Azure Storage-Konto.

Sie sollten die Verwendung von Zugriffsschlüsseln und Verbindungszeichenfolgen auf vorläufige Proof-of-Concept-Anwendungen oder Entwicklungsprototypen beschränken, die keinen Zugriff auf Produktionsdaten oder vertrauliche Daten haben. In allen anderen Fällen sollten Sie immer die tokenbasierten Authentifizierungsklassen, die im Azure SDK verfügbar sind, für die Authentifizierung bei Azure-Ressourcen verwenden.

Microsoft empfiehlt, dass Clients entweder Microsoft Entra ID oder eine SAS (Shared Access Signature) verwenden, um den Zugriff auf Daten in Azure Storage zu autorisieren. Weitere Informationen finden Sie unter Autorisieren von Vorgängen für den Datenzugriff.

Erstellen eines Containers

Ein Container fungiert als Dateisystem für Ihre Dateien. Sie können ein Dateisystem erstellen, indem Sie eine FileSystemClient-Instanz abrufen und dann die Methode FileSystemClient.Create aufrufen.

In diesem Beispiel wird ein Container namens my-file-system erstellt.

async function CreateFileSystem(dataLakeServiceClient) {

  const fileSystemName = "my-file-system";

  const fileSystemClient = dataLakeServiceClient.getFileSystemClient(fileSystemName);

  const createResponse = await fileSystemClient.create();

}

Erstellen eines Verzeichnisses

Erstellen Sie einen Verzeichnisverweis, indem Sie eine DirectoryClient-Instanz abrufen und dann die Methode DirectoryClient.create aufrufen.

In diesem Beispiel wird einem Container das Verzeichnis my-directory hinzugefügt.

async function CreateDirectory(fileSystemClient) {

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

  await directoryClient.create();

}

Umbenennen oder Verschieben eines Verzeichnisses

Rufen Sie die Methode DirectoryClient.rename auf, um ein Verzeichnis umzubenennen oder zu verschieben. Übergeben Sie den Pfad des gewünschten Verzeichnisses als Parameter.

In diesem Beispiel wird ein Unterverzeichnis in my-directory-renamed umbenannt.

async function RenameDirectory(fileSystemClient) {

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

}

Im folgenden Beispiel wird das Verzeichnis namens my-directory-renamed in das Unterverzeichnis des Verzeichnisses namens my-directory-2 verschoben.

async function MoveDirectory(fileSystemClient) {

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

}

Löschen eines Verzeichnisses

Löschen Sie ein Verzeichnis, indem Sie die Methode DirectoryClient.delete aufrufen.

In diesem Beispiel wird das Verzeichnis my-directory gelöscht.

async function DeleteDirectory(fileSystemClient) {

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

}

Hochladen einer Datei in ein Verzeichnis

Lesen Sie zunächst eine Datei. Dieses Beispiel verwendet das Node.js-Modul fs. Erstellen Sie dann einen Dateiverweis im Zielverzeichnis, indem Sie eine FileClient-Instanz erstellen und dann die Methode FileClient.create aufrufen. Laden Sie eine Datei hoch, indem Sie die Methode FileClient.append aufrufen. Schließen Sie den Uploadvorgang durch Aufrufen der Methode FileClient.flush ab.

Im folgenden Beispiel wird eine Textdatei in ein Verzeichnis namens my-directory hochgeladen.

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

}

Herunterladen aus einem Verzeichnis

Erstellen Sie zunächst eine FileSystemClient-Instanz, die die herunterzuladende Datei repräsentiert. Verwenden Sie die Methode FileSystemClient.read, um die Datei zu lesen. Schreiben Sie dann die Datei. Dieses Beispiel verwendet hierfür das Node.js-Modul fs.

Hinweis

Diese Methode zum Herunterladen einer Datei funktioniert nur für Node.js-Anwendungen. Wenn Sie Ihren Code in einem Browser ausführen möchten, finden Sie ein Beispiel dafür in der Readme-Datei Azure Storage File Data Lake client library for JavaScript (Azure Data Lake Storage-Clientbibliothek für JavaScript).

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

Auflisten des Verzeichnisinhalts

Dieses Beispiel gibt die Namen aller Verzeichnisse und Dateien aus, die im Verzeichnis my-directory gespeichert sind.

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

}

Weitere Informationen