Verwenden des JavaScript-SDK in Node.js zum Verwalten von Verzeichnissen und Dateien in Azure Data Lake Storage Gen2
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.
Informationen zum Abrufen, Festlegen und Aktualisieren der Zugriffssteuerungslisten (Access Control Lists, ACLs) von Verzeichnissen und Dateien finden Sie unter Verwenden von JavaScript SDK in Node.js zum Verwalten von Zugriffssteuerungslisten in Azure Data Lake Storage Gen2.
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}`);
}
}