A JavaScript SDK használata a Node.js-ben könyvtárak és fájlok kezeléséhez az Azure Data Lake Storage Gen2-ben
Ez a cikk bemutatja, hogyan hozhat létre és kezelhet címtárakat és fájlokat Node.js hierarchikus névtérrel rendelkező tárfiókokban.
A címtárak és fájlok hozzáférés-vezérlési listáinak (ACL) beszerzéséről, beállításáról és frissítéséről a JavaScript SDK használata Node.js az Azure Data Lake Storage Gen2-ben az ACL-ek kezeléséhez című témakörben olvashat.
Csomagminták (node Csomagkezelő) | – visszajelzés |
Előfeltételek
Azure-előfizetés. További információ: Ingyenes Azure-próbaidőszak lekérése.
Olyan tárfiók, amely engedélyezve van a hierarchikus névtérrel. Az alábbi utasításokat követve hozzon létre egyet.
Ha ezt a csomagot egy Node.js alkalmazásban használja, Node.js 8.0.0-s vagy újabb verzióra lesz szüksége.
A projekt beállítása
Telepítse a JavaScripthez készült Data Lake-ügyfélkódtárat egy terminálablak megnyitásával, majd írja be a következő parancsot.
npm install @azure/storage-file-datalake
Importálja a storage-file-datalake
csomagot úgy, hogy ezt az utasítást a kódfájl tetején helyezi el.
const {
AzureStorageDataLake,
DataLakeServiceClient,
StorageSharedKeyCredential
} = require("@azure/storage-file-datalake");
Feljegyzés
A Data Lake Storage többprotokollos hozzáférése lehetővé teszi az alkalmazások számára, hogy a Blob API-kat és a Data Lake Storage Gen2 API-kat is használják a hierarchikus névtérrel (HNS) rendelkező tárfiókokban lévő adatok kezeléséhez. A Data Lake Storage Gen2-ben egyedülálló képességek, például a címtárműveletek és az ACL-ek használatakor használja a Data Lake Storage Gen2 API-kat, ahogyan az ebben a cikkben látható.
Az adott forgatókönyvben használni kívánt API-k kiválasztásakor vegye figyelembe az alkalmazás számítási feladatait és igényeit, valamint a HNS ismert problémáit és a számítási feladatokra és alkalmazásokra gyakorolt hatását.
Csatlakozás a fiókhoz
A cikkben szereplő kódrészletek használatához létre kell hoznia egy DataLakeServiceClient-példányt , amely a tárfiókot jelöli.
Csatlakozás a Microsoft Entra ID használatával
A JS-hez készült Azure Identity-ügyfélkódtár használatával hitelesítheti az alkalmazást a Microsoft Entra-azonosítóval.
Hozzon létre egy DataLakeServiceClient-példányt , és adja át a DefaultAzureCredential osztály új példányát.
function GetDataLakeServiceClientAD(accountName) {
const dataLakeServiceClient = new DataLakeServiceClient(
`https://${accountName}.dfs.core.windows.net`,
new DefaultAzureCredential());
return dataLakeServiceClient;
}
Az adatokhoz való hozzáférés engedélyezéséhez a DefaultAzureCredential használatával kapcsolatos további információkért lásd: Áttekintés: JavaScript-alkalmazások hitelesítése az Azure-ban az Azure SDK használatával.
Csatlakozás fiókkulcs használatával
Az adatokhoz való hozzáférést a fiók hozzáférési kulcsával (megosztott kulcs) engedélyezheti. Ez a példa létrehoz egy DataLakeServiceClient-példányt , amely a fiókkulccsal van engedélyezve.
function GetDataLakeServiceClient(accountName, accountKey) {
const sharedKeyCredential =
new StorageSharedKeyCredential(accountName, accountKey);
const dataLakeServiceClient = new DataLakeServiceClient(
`https://${accountName}.dfs.core.windows.net`, sharedKeyCredential);
return dataLakeServiceClient;
}
Ez az engedélyezési módszer csak Node.js alkalmazások esetében működik. Ha böngészőben szeretné futtatni a kódot, a Microsoft Entra ID használatával engedélyezheti.
Figyelemfelhívás
A megosztott kulccsal való engedélyezés nem ajánlott, mivel kevésbé biztonságos. Az optimális biztonság érdekében tiltsa le a megosztott kulccsal történő engedélyezést a tárfiókhoz, az Azure Storage-fiók megosztott kulcsának engedélyezésének megakadályozása című cikkben leírtak szerint.
A hozzáférési kulcsok és a kapcsolati sztring használatát a koncepcióalkalmazások vagy a fejlesztési prototípusok kezdeti ellenőrzésére kell korlátozni, amelyek nem férnek hozzá éles vagy bizalmas adatokhoz. Ellenkező esetben az Azure SDK-ban elérhető jogkivonatalapú hitelesítési osztályokat mindig előnyben kell részesíteni az Azure-erőforrásokhoz való hitelesítéskor.
A Microsoft azt javasolja, hogy az ügyfelek a Microsoft Entra-azonosítót vagy a közös hozzáférésű jogosultságkódot (SAS) használják az Azure Storage-adatokhoz való hozzáférés engedélyezéséhez. További információ: Műveletek engedélyezése adathozzáféréshez.
Tároló létrehozása
A tároló fájlrendszerként működik a fájlokhoz. Létrehozhat egyet egy FileSystemClient-példány lekérésével, majd a FileSystemClient.Create metódus meghívásával .
Ez a példa létrehoz egy tárolót .my-file-system
async function CreateFileSystem(dataLakeServiceClient) {
const fileSystemName = "my-file-system";
const fileSystemClient = dataLakeServiceClient.getFileSystemClient(fileSystemName);
const createResponse = await fileSystemClient.create();
}
Címtár létrehozása
Hozzon létre egy címtárhivatkozást egy DirectoryClient-példány lekérésével, majd hívja meg a DirectoryClient.create metódust.
Ez a példa egy tárolóhoz elnevezett my-directory
könyvtárat ad hozzá.
async function CreateDirectory(fileSystemClient) {
const directoryClient = fileSystemClient.getDirectoryClient("my-directory");
await directoryClient.create();
}
Címtár átnevezése vagy áthelyezése
Nevezze át vagy helyezze át a címtárat a DirectoryClient.rename metódus meghívásával. Adja meg a kívánt könyvtár elérési útját egy paraméternek.
Ez a példa átnevez egy alkönyvtárat a névre my-directory-renamed
.
async function RenameDirectory(fileSystemClient) {
const directoryClient = fileSystemClient.getDirectoryClient("my-directory");
await directoryClient.move("my-directory-renamed");
}
Ez a példa egy névvel ellátott my-directory-renamed
könyvtárat helyez át egy névvel ellátott my-directory-2
könyvtár alkönyvtárába.
async function MoveDirectory(fileSystemClient) {
const directoryClient = fileSystemClient.getDirectoryClient("my-directory-renamed");
await directoryClient.move("my-directory-2/my-directory-renamed");
}
Könyvtár törlése
Törölje a címtárat a DirectoryClient.delete metódus meghívásával.
Ez a példa egy névvel ellátott my-directory
könyvtárat töröl.
async function DeleteDirectory(fileSystemClient) {
const directoryClient = fileSystemClient.getDirectoryClient("my-directory");
await directoryClient.delete();
}
Fájl feltöltése könyvtárba
Először olvasson be egy fájlt. Ez a példa a Node.js fs
modult használja. Ezután hozzon létre egy fájlhivatkozást a célkönyvtárban egy FileClient-példány létrehozásával, majd hívja meg a FileClient.create metódust. Töltsön fel egy fájlt a FileClient.append metódus meghívásával. A FileClient.flush metódus meghívásával végezze el a feltöltést.
Ez a példa egy szövegfájlt tölt fel egy .' nevű my-directory
könyvtárba.
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);
}
Letöltés könyvtárból
Először hozzon létre egy FileSystemClient-példányt , amely a letölteni kívánt fájlt jelöli. A fájl olvasásához használja a FileSystemClient.read metódust. Ezután írja meg a fájlt. Ez a példa a Node.js fs
modult használja erre.
Feljegyzés
Ez a fájlletöltési módszer csak Node.js alkalmazások esetében működik. Ha böngészőben szeretné futtatni a kódot, tekintse meg a JavaScript-olvasófájlhoz készült Azure Storage File Data Lake-ügyfélkódtárat, amelyből megtudhatja, hogyan teheti ezt meg egy böngészőben.
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;
});
}
Könyvtár tartalmának listázása
Ez a példa az egyes címtárak és fájlok nevét nyomtatja ki, amelyek egy névvel ellátott my-directory
könyvtárban találhatók.
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}`);
}
}