获取子文件夹 Azure 中的 blob 列表

MMX*_*X11 0 javascript azure azure-storage node.js

我正在使用 JS sdk 与 Azure 存储进行交互。

我有一个看起来像的层次结构:演示(容器名称)/ ID // 文件列表

所以我试图获取特定子文件夹的文件列表。我认为 usinglistBlobsByHierarchy是要使用的,但我无法获得该特定文件夹的 blob 列表。

我的代码:

 for await (const item of containerClient.listBlobsByHierarchy("/")) {
        console.log(item, 'ITEM')
        if (item.kind === "prefix") {
          console.log(`\tBlobPrefix: ${item.name}`);
        } else {
          console.log(`\tBlobItem: name - ${item.name}, last modified - ${item.properties.lastModified}`);
        }
      }
Run Code Online (Sandbox Code Playgroud)

返回

    { kind: 'prefix', name: '5f09b7ab047f9804a861672d/' } ITEM
    BlobPrefix: 5f09b7ab047f9804a861672d/
{ kind: 'prefix', name: '5f300119536cc32ce44c0013/' } ITEM
    BlobPrefix: 5f300119536cc32ce44c0013/
{ kind: 'prefix', name: 'test/' } ITEM
    BlobPrefix: test/
Run Code Online (Sandbox Code Playgroud)

例如,现在我想获取文件夹 5f09b7ab047f9804a861672d 中的文件列表

Jim*_* Xu 5

使用 azure 节点存储 sdk,我们可以使用 te 方法listBlobsFlatlistBlobsByHierarchy列出 blob。这两种方法有一些区别。该方法listBlobsFlat可以列出所有 blob。该方法listBlobsByHierarchy只能列出顶级文件夹和 blob,就像您在 C:/ 下运行“dir”一样。此外,如果您想列出子文件夹中的子 blob,我们需要使用prefix.

例如

我的容器结构如下

hello.txt
...
test
  test.txt
  test1
     data.json 
Run Code Online (Sandbox Code Playgroud)

代码(列出文件夹 test 中的 blob)

const {
  BlobServiceClient,
  StorageSharedKeyCredential,
} = require("@azure/storage-blob");

// Enter your storage account name and shared key
const account = "jimtestdiag924";
const accountKey ="";

// Use StorageSharedKeyCredential with storage account and account key
// StorageSharedKeyCredential is only available in Node.js runtime, not in browsers
const sharedKeyCredential = new StorageSharedKeyCredential(account, accountKey);
const blobServiceClient = new BlobServiceClient(
  `https://${account}.blob.core.windows.net`,
  sharedKeyCredential,
);
const containerName = "testupload";
async function listBlobs() {
  const containerClient = await blobServiceClient.getContainerClient(
    containerName,
  );
  console.log("list blobs with method listBlobsFlat");
  let iter = containerClient.listBlobsFlat({ prefix: "test/" });
  for await (const item of iter) {
    console.log(`\tBlobItem: name - ${item.name}`);
  }
  console.log("list blobs with method listBlobsByHierarchy");
  let iter1 = containerClient.listBlobsByHierarchy("/", { prefix: "test/" });
  for await (const item of iter1) {
    if (item.kind === "prefix") {
      console.log(`\tBlobPrefix: ${item.name}`);
      await listblob(containerClient, item.name);
    } else {
      console.log(`\tBlobItem: name - ${item.name}`);
    }
  }
}

async function listblob(containerClient, prefix) {
  let iter1 = containerClient.listBlobsByHierarchy("/", { prefix: prefix });
  for await (const item of iter1) {
    if (item.kind === "prefix") {
      console.log(`\tBlobPrefix: ${item.name}`);
    } else {
      console.log(`\tBlobItem: name - ${item.name}`);
    }
  }
}

listBlobs().catch((err) => {
  console.error("Error running sample:", err.message);
});

Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明