Megosztás a következőn keresztül:


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-2kö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-directorykö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-directorykö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-directorykö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}`);
  }

}

Lásd még