استخدم JavaScript SDK في Node.js لإدارة الدلائل والملفات في Azure Data Lake Storage Gen2

توضح لك هذه المقالة كيفية استخدام Node.js لإنشاء الدلائل والملفات وإدارتها في حسابات التخزين التي تحتوي على مساحة الأسماء الهرمية.

للتعرف على كيفية الحصول على قائمة التحكم بالوصول (ACL) الخاصة بالدلائل والملفات وتعيينها وتحديثها، راجع استخدام JavaScript SDK في Node.js لإدارة قوائم التحكم بالوصول في Azure Data Lake Storage Gen2.

حزمة (Node Package Manager) | عينات | إعطاء التعليقات

المتطلبات الأساسية

  • اشتراك Azure. لمزيد من المعلومات، راجع الحصول على إصدار تجريبي من Azure.

  • حساب تخزين يحتوي على مساحة أسماء هرمية ممكّنة. اتبع هذه الإرشادات للإنشاء.

  • إذا كنت تستخدم هذه الحزمة في تطبيق Node.js، فستحتاج Node.js 8.0.0 أو أعلى.

إعداد مشروعك

ثبت مكتبة عميل Data Lake لـ JavaScript عن طريق فتح نافذة terminal، ثم اكتب الأمر التالي.

npm install @azure/storage-file-datalake

استورد الحزمة storage-file-datalake عن طريق وضع هذه العبارة في الجزء العلوي من ملف التعليمة البرمجية.

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

الاتصال بالحساب

لاستخدام القصاصة البرمجية في هذه المقالة، ستحتاج إلى إنشاء مثيل DataLakeServiceClient يُمثل حساب التخزين.

الاتصال باستخدام مفتاح حساب

هذه هي أسهل طريقة للاتصال بحساب.

يقوم هذا المثال بإنشاء مثيل DataLakeServiceClient باستخدام مفتاح حساب.


function GetDataLakeServiceClient(accountName, accountKey) {

  const sharedKeyCredential =
     new StorageSharedKeyCredential(accountName, accountKey);

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

  return datalakeServiceClient;
}

ملاحظة

يعمل أسلوب التخويل هذا فقط مع تطبيقات Node.js. إذا كنت تخطط لتشغيل التعليمة برمجية في مستعرض، فيمكنك التخويل باستخدام Microsoft Azure Active Directory (Azure AD).

الاتصال باستخدام Microsoft Azure Active Directory (Azure AD)

يمكنك استخدام مكتبة عميل هوية Azure لـ JS لتخويل تطبيقك باستخدام Microsoft Azure AD.

ينشئ هذا المثال مثيل DataLakeServiceClient باستخدام معرّف عميل وسر عميل ومعرّف مستأجر. للحصول على هذه القيم، راجع الحصول على رمز مميز من Microsoft Azure AD لتخويل الطلبات من تطبيق عميل.

function GetDataLakeServiceClientAD(accountName, clientID, clientSecret, tenantID) {

  const credential = new ClientSecretCredential(tenantID, clientID, clientSecret);

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

  return datalakeServiceClient;
}

ملاحظة

لمزيد من الأمثلة، راجع مكتبة عميل هوية Azure للحصول على وثائق JS.

إنشاء حاوية

تعمل الحاوية كنظام ملفات لملفاتك. يمكنك إنشاء واحد عن طريق الحصول على مثيل FileSystemClient ثم استدعاء الأسلوب FileSystemClient.Create.

ينشئ هذا المثال حاوية باسم my-file-system.

async function CreateFileSystem(datalakeServiceClient) {

  const fileSystemName = "my-file-system";

  const fileSystemClient = datalakeServiceClient.getFileSystemClient(fileSystemName);

  const createResponse = await fileSystemClient.create();

}

إنشاء دليل

إنشاء مرجع دليل عن طريق الحصول على مثيل DirectoryClient ثم استدعاء الأسلوب DirectoryClient.create.

يضيف هذا المثال دليلاً باسم my-directory إلى حاوية.

async function CreateDirectory(fileSystemClient) {

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

  await directoryClient.create();

}

إعادة تسمية دليل أو نقله

إعادة تسمية أو نقل دليل عن طريق استدعاء الأسلوب DirectoryClient.rename. تمرير مسار الدليل المطلوب معلمة.

يُعيد هذا المثال تسمية دليل فرعي إلى الاسم my-directory-renamed.

async function RenameDirectory(fileSystemClient) {

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

}

ينقل هذا المثال دليلاً باسم my-directory-renamed إلى دليل فرعي لدليل باسم my-directory-2.

async function MoveDirectory(fileSystemClient) {

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

}

حذف دليل

حذف دليل عن طريق استدعاء الأسلوب DirectoryClient.delete.

يحذف هذا المثال دليلاً باسم my-directory.

async function DeleteDirectory(fileSystemClient) {

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

}

تحميل ملف إلى دليل

أولاً، اقرأ ملفاً. يستخدم هذا المثال الوحدة النمطية Node.js fs. ثم قم بإنشاء مرجع ملف في الدليل الهدف عن طريق إنشاء مثيل FileClient ثم استدعاء الأسلوب FileClient.create. تحميل ملف عن طريق استدعاء الأسلوب FileClient.append. تأكد من إكمال التحميل عن طريق استدعاء الأسلوب FileClient.flush.

يقوم هذا المثال بتحميل ملف نصي إلى دليل باسم 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);

}

تنزيل من دليل

أولاً، قم بإنشاء مثيل FileSystemClient الذي يُمثل الملف الذي تريد تنزيله. استخدم الأسلوب FileSystemClient.read لقراءة الملف. ثم اكتب الملف. يستخدم هذا المثال الوحدة النمطية Node.js fs للقيام بذلك.

ملاحظة

يعمل أسلوب تنزيل ملف هذا فقط مع تطبيقات Node.js. إذا كنت تخطط لتشغيل التعليمة البرمجية في مستعرض، فراجع مكتبة عميل Azure Storage File Data Lake لـ 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;
  });
}

قائمة محتويات الدليل

يقوم هذا المثال بطباعة أسماء كل دليل وملف موجود في دليل باسم 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}`);
  }

}

راجع أيضًا