Gunakan JavaScript SDK di Node.js untuk mengelola direktori dan file di Azure Data Lake Storage Gen2
Artikel ini menunjukkan cara menggunakan Node.js untuk membuat dan mengelola direktori dan file di akun penyimpanan yang memiliki namespace hierarkis.
Untuk mempelajari cara mendapatkan, mengatur, dan memperbarui daftar kontrol akses (ACL) direktori dan file, lihat Gunakan JavaScript SDK di Node.js untuk mengelola ACL di Azure Data Lake Storage Gen2.
Paket (Manajer Paket Node) | Sampel | Beri Umpan Balik
Prasyarat
Langganan Azure. Untuk informasi selengkapnya, lihat Dapatkan uji coba gratis Azure.
Akun penyimpanan dengan namespace hierarkis aktif. Ikuti petunjuk berikut untuk membuatnya.
Jika Anda menggunakan paket ini dalam aplikasi Node.js, Anda memerlukan Node.js 8.0.0 atau yang lebih tinggi.
Menyiapkan proyek Anda
Instal pustaka klien Data Lake untuk JavaScript dengan membuka jendela terminal, lalu ketik perintah berikut.
npm install @azure/storage-file-datalake
Impor storage-file-datalake
paket dengan menempatkan pernyataan ini di bagian atas file kode Anda.
const {
AzureStorageDataLake,
DataLakeServiceClient,
StorageSharedKeyCredential
} = require("@azure/storage-file-datalake");
Catatan
Akses multi-protokol pada Data Lake Storage memungkinkan aplikasi menggunakan API Blob dan API Data Lake Storage Gen2 untuk bekerja dengan data di akun penyimpanan dengan namespace hierarkis (HNS) diaktifkan. Saat bekerja dengan kemampuan yang unik untuk Data Lake Storage Gen2, seperti operasi direktori dan ACL, gunakan API Data Lake Storage Gen2, seperti yang ditunjukkan dalam artikel ini.
Saat memilih API mana yang akan digunakan dalam skenario tertentu, pertimbangkan beban kerja dan kebutuhan aplikasi Anda, bersama dengan masalah yang diketahui dan dampak HNS pada beban kerja dan aplikasi.
Sambungkan ke akun
Untuk menggunakan cuplikan dalam artikel ini, Anda harus membuat instance DataLakeServiceClient yang mewakili akun penyimpanan.
Koneksi dengan menggunakan ID Microsoft Entra
Anda dapat menggunakan pustaka klien identitas Azure untuk JS untuk mengautentikasi aplikasi Anda dengan ID Microsoft Entra.
Buat instans DataLakeServiceClient dan teruskan instans baru kelas DefaultAzureCredential .
function GetDataLakeServiceClientAD(accountName) {
const dataLakeServiceClient = new DataLakeServiceClient(
`https://${accountName}.dfs.core.windows.net`,
new DefaultAzureCredential());
return dataLakeServiceClient;
}
Untuk mempelajari selengkapnya tentang menggunakan DefaultAzureCredential untuk mengotorisasi akses ke data, lihat Gambaran Umum: Mengautentikasi aplikasi JavaScript ke Azure menggunakan Azure SDK.
Sambungkan dengan menggunakan kunci akun
Anda dapat mengotorisasi akses ke data menggunakan kunci akses akun Anda (Kunci Bersama). Contoh ini membuat instans DataLakeServiceClient yang diotorisasi dengan kunci akun.
function GetDataLakeServiceClient(accountName, accountKey) {
const sharedKeyCredential =
new StorageSharedKeyCredential(accountName, accountKey);
const dataLakeServiceClient = new DataLakeServiceClient(
`https://${accountName}.dfs.core.windows.net`, sharedKeyCredential);
return dataLakeServiceClient;
}
Metode otorisasi ini hanya berfungsi untuk aplikasi Node.js. Jika Anda berencana menjalankan kode di browser, Anda dapat mengotorisasi dengan menggunakan ID Microsoft Entra.
Perhatian
Otorisasi dengan Kunci Bersama tidak disarankan karena mungkin kurang aman. Untuk keamanan optimal, nonaktifkan otorisasi melalui Kunci Bersama untuk akun penyimpanan Anda, seperti yang dijelaskan dalam Mencegah otorisasi Kunci Bersama untuk akun Azure Storage.
Penggunaan kunci akses dan string koneksi harus dibatasi pada bukti awal aplikasi konsep atau prototipe pengembangan yang tidak mengakses data produksi atau sensitif. Jika tidak, kelas autentikasi berbasis token yang tersedia di Azure SDK harus selalu disukai saat mengautentikasi ke sumber daya Azure.
Microsoft menyarankan agar klien menggunakan ID Microsoft Entra atau tanda tangan akses bersama (SAS) untuk mengotorisasi akses ke data di Azure Storage. Untuk informasi selengkapnya, lihat Mengotorisasi operasi untuk akses data.
Membuat kontainer
Kontainer bertindak sebagai sistem file untuk file Anda. Anda dapat membuatnya dengan mendapatkan instance FileSystemClient, lalu memanggil metode FileSystemClient.Create.
Contoh ini membuat kontainer bernama my-file-system
.
async function CreateFileSystem(dataLakeServiceClient) {
const fileSystemName = "my-file-system";
const fileSystemClient = dataLakeServiceClient.getFileSystemClient(fileSystemName);
const createResponse = await fileSystemClient.create();
}
Membuat direktori
Buat referensi direktori dengan mendapatkan instance DirectoryClient, lalu panggil metode DirectoryClient.create.
Contoh ini menambahkan direktori bernama my-directory
ke kontainer.
async function CreateDirectory(fileSystemClient) {
const directoryClient = fileSystemClient.getDirectoryClient("my-directory");
await directoryClient.create();
}
Ganti nama atau pindahkan direktori
Ganti nama atau pindahkan direktori dengan memanggil metode DirectoryClient.rename. Berikan jalur direktori yang diinginkan sebuah parameter.
Contoh ini mengganti nama subdirektori menjadi nama my-directory-renamed
.
async function RenameDirectory(fileSystemClient) {
const directoryClient = fileSystemClient.getDirectoryClient("my-directory");
await directoryClient.move("my-directory-renamed");
}
Contoh ini memindahkan direktori bernama my-directory-renamed
ke subdirektori direktori bernama my-directory-2
.
async function MoveDirectory(fileSystemClient) {
const directoryClient = fileSystemClient.getDirectoryClient("my-directory-renamed");
await directoryClient.move("my-directory-2/my-directory-renamed");
}
Hapus direktori
Hapus direktori dengan memanggil metode DirectoryClient.delete.
Contoh ini menghapus direktori bernama my-directory
.
async function DeleteDirectory(fileSystemClient) {
const directoryClient = fileSystemClient.getDirectoryClient("my-directory");
await directoryClient.delete();
}
Unggah file ke direktori
Pertama, baca file. Contoh ini menggunakan modul Node.js fs
. Kemudian, buat referensi file di direktori target dengan membuat instance FileClient, lalu panggil metode FileClient.create. Unggah file dengan memanggil metode FileClient.append. Pastikan untuk melengkapi unggahan dengan memanggil metode FileClient.flush.
Contoh ini mengunggah file teks ke direktori bernama 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);
}
Unduh dari direktori
Pertama, buat instance FileSystemClient yang mewakili file yang ingin Anda unduh. Gunakan metode FileSystemClient.read untuk membaca file. Kemudian, tulis file. Contoh ini menggunakan modul Node.js fs
untuk melakukan itu.
Catatan
Metode pengunduhan file ini hanya berfungsi untuk aplikasi Node.js. Jika Anda berencana untuk menjalankan kode Anda di browser, lihat pustaka klien Azure Storage File Data Lake untuk readme file JavaScript untuk contoh cara melakukan ini di browser.
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;
});
}
Daftar isi direktori
Contoh ini, mencetak nama setiap direktori dan file yang terletak di direktori bernama 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}`);
}
}