Použití sady JavaScript SDK v Node.js ke správě adresářů a souborů ve službě Azure Data Lake Storage
V tomto článku se dozvíte, jak pomocí Node.js vytvářet a spravovat adresáře a soubory v účtech úložiště, které mají hierarchický obor názvů.
Informace o tom, jak získat, nastavit a aktualizovat seznamy řízení přístupu (ACL) adresářů a souborů, najdete v tématu Použití javascriptové sady SDK v Node.js ke správě seznamů ACL ve službě Azure Data Lake Storage.
Ukázky | balíčku (node Správce balíčků) | Poskytnout zpětnou vazbu
Požadavky
Předplatné Azure. Další informace najdete v tématu Získání bezplatné zkušební verze Azure.
Účet úložiště s povoleným hierarchickým oborem názvů. Postupujte podle těchto pokynů a vytvořte ho.
Pokud tento balíček používáte v aplikaci Node.js, budete potřebovat Node.js 8.0.0 nebo vyšší.
Nastavení projektu
Nainstalujte klientskou knihovnu Data Lake pro JavaScript otevřením okna terminálu a zadáním následujícího příkazu.
npm install @azure/storage-file-datalake
Importujte storage-file-datalake
balíček tak, že tento příkaz umístíte do horní části souboru kódu.
const {
AzureStorageDataLake,
DataLakeServiceClient,
StorageSharedKeyCredential
} = require("@azure/storage-file-datalake");
Poznámka:
Přístup k více protokolům ve službě Data Lake Storage umožňuje aplikacím používat rozhraní API objektů blob i rozhraní API Data Lake Storage Gen2 k práci s daty v účtech úložiště s povoleným hierarchickým oborem názvů (HNS). Při práci s funkcemi jedinečnými pro Data Lake Storage Gen2, jako jsou operace adresářů a seznamy ACL, použijte rozhraní API Data Lake Storage Gen2, jak je znázorněno v tomto článku.
Při volbě rozhraní API, která se mají použít v daném scénáři, zvažte úlohy a potřeby vaší aplikace spolu se známými problémy a dopadem HNS na úlohy a aplikace.
Připojení k účtu
Pokud chcete použít fragmenty kódu v tomto článku, budete muset vytvořit instanci DataLakeServiceClient , která představuje účet úložiště.
Připojení pomocí Microsoft Entra ID
Klientskou knihovnu identit Azure pro JS můžete použít k ověření vaší aplikace pomocí Microsoft Entra ID.
Vytvořte instanci DataLakeServiceClient a předejte novou instanci DefaultAzureCredential třídy.
function GetDataLakeServiceClientAD(accountName) {
const dataLakeServiceClient = new DataLakeServiceClient(
`https://${accountName}.dfs.core.windows.net`,
new DefaultAzureCredential());
return dataLakeServiceClient;
}
Další informace o použití DefaultAzureCredential k autorizaci přístupu k datům najdete v tématu Přehled: Ověřování javascriptových aplikací v Azure pomocí sady Azure SDK.
Připojení pomocí klíče účtu
Přístup k datům můžete autorizovat pomocí přístupových klíčů k účtu (sdílený klíč). Tento příklad vytvoří instanci DataLakeServiceClient , která je autorizovaná pomocí klíče účtu.
function GetDataLakeServiceClient(accountName, accountKey) {
const sharedKeyCredential =
new StorageSharedKeyCredential(accountName, accountKey);
const dataLakeServiceClient = new DataLakeServiceClient(
`https://${accountName}.dfs.core.windows.net`, sharedKeyCredential);
return dataLakeServiceClient;
}
Tato metoda autorizace funguje pouze pro Node.js aplikace. Pokud plánujete spustit kód v prohlížeči, můžete autorizovat pomocí ID Microsoft Entra.
Upozornění
Autorizace pomocí sdíleného klíče se nedoporučuje, protože může být méně zabezpečená. Pokud chcete zajistit optimální zabezpečení, zakažte autorizaci prostřednictvím sdíleného klíče pro váš účet úložiště, jak je popsáno v části Zabránění autorizaci sdíleného klíče pro účet služby Azure Storage.
Použití přístupových klíčů a připojovací řetězec by mělo být omezené na počáteční testování konceptů aplikací nebo prototypů vývoje, které nepřistupují k produkčním nebo citlivým datům. Jinak by se při ověřování prostředků Azure měly vždy upřednostňovat třídy ověřování založené na tokenech, které jsou dostupné v sadě Azure SDK.
Microsoft doporučuje, aby klienti k autorizaci přístupu k datům ve službě Azure Storage používali buď ID Microsoft Entra, nebo sdílený přístupový podpis (SAS). Další informace najdete v tématu Autorizace operací pro přístup k datům.
Vytvoření kontejneru
Kontejner funguje jako systém souborů. Můžete ho vytvořit získáním instance FileSystemClient a následným voláním FileSystemClient.Create metody.
Tento příklad vytvoří kontejner s názvem my-file-system
.
async function CreateFileSystem(dataLakeServiceClient) {
const fileSystemName = "my-file-system";
const fileSystemClient = dataLakeServiceClient.getFileSystemClient(fileSystemName);
const createResponse = await fileSystemClient.create();
}
Vytvoření adresáře
Vytvořte odkaz na adresář získáním instance DirectoryClient a voláním Metody DirectoryClient.create .
Tento příklad přidá adresář pojmenovaný my-directory
do kontejneru.
async function CreateDirectory(fileSystemClient) {
const directoryClient = fileSystemClient.getDirectoryClient("my-directory");
await directoryClient.create();
}
Přejmenování nebo přesunutí adresáře
Přejmenujte nebo přesuňte adresář voláním metody DirectoryClient.rename . Předejte cestu požadovaného adresáře parametru.
Tento příklad přejmenuje podadresář na název my-directory-renamed
.
async function RenameDirectory(fileSystemClient) {
const directoryClient = fileSystemClient.getDirectoryClient("my-directory");
await directoryClient.move("my-directory-renamed");
}
Tento příklad přesune adresář pojmenovaný my-directory-renamed
do podadresáře adresáře s názvem my-directory-2
.
async function MoveDirectory(fileSystemClient) {
const directoryClient = fileSystemClient.getDirectoryClient("my-directory-renamed");
await directoryClient.move("my-directory-2/my-directory-renamed");
}
Odstranění adresáře
Odstraňte adresář zavoláním metody DirectoryClient.delete .
Tento příklad odstraní adresář s názvem my-directory
.
async function DeleteDirectory(fileSystemClient) {
const directoryClient = fileSystemClient.getDirectoryClient("my-directory");
await directoryClient.delete();
}
Nahrání souboru do adresáře
Nejprve si přečtěte soubor. V tomto příkladu se používá modul Node.js fs
. Potom vytvořte odkaz na soubor v cílovém adresáři vytvořením instance FileClient a voláním FileClient.create metody. Nahrajte soubor voláním Metody FileClient.append . Nezapomeňte nahrávání dokončit voláním metody FileClient.flush .
Tento příklad nahraje textový soubor do adresáře s názvem 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);
}
Stažení z adresáře
Nejprve vytvořte instanci FileSystemClient , která představuje soubor, který chcete stáhnout. Ke čtení souboru použijte metodu FileSystemClient.read . Potom soubor zapište. V tomto příkladu se k tomu používá modul Node.js fs
.
Poznámka:
Tato metoda stahování souboru funguje jenom pro Node.js aplikace. Pokud máte v úmyslu spustit kód v prohlížeči, podívejte se na klientskou knihovnu Azure Storage Data Lake pro soubor readme JavaScriptu , kde najdete příklad toho, jak to udělat v prohlížeči.
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;
});
}
Výpis obsahu adresáře
Tento příklad vytiskne názvy jednotlivých adresářů a souborů, které se nacházejí v adresáři s názvem 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}`);
}
}