Aracılığıyla paylaş


Azure Data Lake Storage 2. Nesil'da dizinleri ve dosyaları yönetmek için Node.js JavaScript SDK'sını kullanma

Bu makalede, hiyerarşik ad alanına sahip depolama hesaplarında dizinler ve dosyalar oluşturmak ve yönetmek için Node.js nasıl kullanılacağı gösterilmektedir.

Dizinlerin ve dosyaların erişim denetim listelerini (ACL) alma, ayarlama ve güncelleştirme hakkında bilgi edinmek için bkz. Azure Data Lake Storage 2. Nesil'da ACL'leri yönetmek için Node.js JavaScript SDK'sını kullanma.

Paket (Düğüm Paket Yöneticisi) | Örnekler | Geri BildirimDe bulunmak

Önkoşullar

Projenizi ayarlama

Bir terminal penceresi açıp aşağıdaki komutu yazarak JavaScript için Data Lake istemci kitaplığını yükleyin.

npm install @azure/storage-file-datalake

storage-file-datalake Bu deyimi kod dosyanızın en üstüne yerleştirerek paketi içeri aktarın.

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

Not

Data Lake Depolama üzerinde çok protokollü erişim, uygulamaların hiyerarşik ad alanı (HNS) etkinleştirilmiş depolama hesaplarındaki verilerle çalışmak için hem Blob API'lerini hem de Data Lake Storage 2. Nesil API'lerini kullanmasını sağlar. Dizin işlemleri ve ACL'ler gibi Data Lake Storage 2. Nesil benzersiz özelliklerle çalışırken, bu makalede gösterildiği gibi Data Lake Storage 2. Nesil API'lerini kullanın.

Belirli bir senaryoda kullanılacak API'leri seçerken, HNS'nin iş yükleri ve uygulamalar üzerindeki bilinen sorunları ve etkisinin yanı sıra uygulamanızın iş yükünü ve gereksinimlerini göz önünde bulundurun.

Hesaba Bağlan

Bu makaledeki kod parçacıklarını kullanmak için depolama hesabını temsil eden bir DataLakeServiceClient örneği oluşturmanız gerekir.

Microsoft Entra Id kullanarak Bağlan

Microsoft Entra Id ile uygulamanızın kimliğini doğrulamak için JS için Azure kimlik istemci kitaplığını kullanabilirsiniz.

DataLakeServiceClient örneği oluşturun ve DefaultAzureCredential sınıfının yeni bir örneğini geçirin.

function GetDataLakeServiceClientAD(accountName) {

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

  return dataLakeServiceClient;
}

Verilere erişimi yetkilendirmek için DefaultAzureCredential kullanma hakkında daha fazla bilgi edinmek için bkz. Genel Bakış: Azure SDK'yı kullanarak Azure'da JavaScript uygulamalarının kimliğini doğrulama.

Hesap anahtarı kullanarak Bağlan

Hesap erişim anahtarlarınızı (Paylaşılan Anahtar) kullanarak verilere erişim yetkisi vekleyebilirsiniz. Bu örnek, hesap anahtarıyla yetkilendirilmiş bir DataLakeServiceClient örneği oluşturur.


function GetDataLakeServiceClient(accountName, accountKey) {

  const sharedKeyCredential =
     new StorageSharedKeyCredential(accountName, accountKey);

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

  return dataLakeServiceClient;
}

Bu yetkilendirme yöntemi yalnızca Node.js uygulamalarda çalışır. Kodunuzu tarayıcıda çalıştırmayı planlıyorsanız, Microsoft Entra Id kullanarak yetkilendirme yapabilirsiniz.

Dikkat

Daha az güvenli olabileceği için Paylaşılan Anahtar ile yetkilendirme önerilmez. En iyi güvenlik için, Azure Depolama hesabı için Paylaşılan Anahtar yetkilendirmesini engelleme bölümünde açıklandığı gibi depolama hesabınız için Paylaşılan Anahtar aracılığıyla yetkilendirmeyi devre dışı bırakın.

Erişim anahtarlarının ve bağlantı dizesi kullanımı, üretim veya hassas verilere erişmeyen ilk kavram kanıtı uygulamaları veya geliştirme prototipleriyle sınırlandırılmalıdır. Aksi takdirde, Azure kaynaklarında kimlik doğrulaması yapılırken Azure SDK'da bulunan belirteç tabanlı kimlik doğrulama sınıfları her zaman tercih edilmelidir.

Microsoft, istemcilerin Azure Depolama'daki verilere erişim yetkisi vermek için Microsoft Entra Id veya paylaşılan erişim imzası (SAS) kullanmasını önerir. Daha fazla bilgi için bkz . Veri erişimi için işlemleri yetkilendirme.

Kapsayıcı oluşturma

Kapsayıcı, dosyalarınız için dosya sistemi görevi görür. Bir FileSystemClient örneği alıp FileSystemClient.Create yöntemini çağırarak oluşturabilirsiniz.

Bu örnek adlı my-file-systembir kapsayıcı oluşturur.

async function CreateFileSystem(dataLakeServiceClient) {

  const fileSystemName = "my-file-system";

  const fileSystemClient = dataLakeServiceClient.getFileSystemClient(fileSystemName);

  const createResponse = await fileSystemClient.create();

}

Dizin oluşturma

Bir DirectoryClient örneği alıp DirectoryClient.create yöntemini çağırarak bir dizin başvurusu oluşturun.

Bu örnek, kapsayıcıya adlı my-directory bir dizin ekler.

async function CreateDirectory(fileSystemClient) {

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

  await directoryClient.create();

}

Bir dizini yeniden adlandırma veya taşıma

DirectoryClient.rename yöntemini çağırarak dizini yeniden adlandırın veya taşıyın. İstenen dizinin yolunu parametre olarak geçirin.

Bu örnek, bir alt dizini adıyla my-directory-renamedyeniden adlandırır.

async function RenameDirectory(fileSystemClient) {

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

}

Bu örnek, adlı bir dizini adlı my-directory-renamed dizinin alt dizinine my-directory-2taşır.

async function MoveDirectory(fileSystemClient) {

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

}

Bir dizini silme

DirectoryClient.delete yöntemini çağırarak bir dizini silin .

Bu örnekte adlı my-directorybir dizin silinir.

async function DeleteDirectory(fileSystemClient) {

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

}

Dizine dosya yükleme

İlk olarak, bir dosyayı okuyun. Bu örnekte Node.js fs modülü kullanılır. Ardından bir FileClient örneği oluşturup FileClient.create yöntemini çağırarak hedef dizinde bir dosya başvurusu oluşturun. FileClient.append yöntemini çağırarak bir dosyayı karşıya yükleyin. FileClient.flush yöntemini çağırarak karşıya yüklemeyi tamamladığınızdan emin olun.

Bu örnek , adlı my-directorybir dizine bir metin dosyası yükler.

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);

}

Dizinden indirme

İlk olarak, indirmek istediğiniz dosyayı temsil eden bir FileSystemClient örneği oluşturun. Dosyayı okumak için FileSystemClient.read yöntemini kullanın. Ardından, dosyayı yazın. Bu örnekte bunu yapmak için Node.js fs modülü kullanılabilecek.

Not

Bu dosya indirme yöntemi yalnızca Node.js uygulamalarda çalışır. Kodunuzu tarayıcıda çalıştırmayı planlıyorsanız, bunun tarayıcıda nasıl yapıldığını gösteren bir örnek için JavaScript benioku dosyası için Azure Depolama File Data Lake istemci kitaplığına bakın.

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;
  });
}

Dizin içeriğini listeleme

Bu örnek, adlı my-directorybir dizinde bulunan her dizinin ve dosyanın adlarını yazdırır.

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}`);
  }

}

Ayrıca bkz.