最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Get list of blobs in subfolder Azure - Stack Overflow

programmeradmin2浏览0评论

I am using the JS sdk to interact with Azure storage.

I have a hierarchy that looks like: demo (container name) / ID // list of files

So I am trying to get a list of files for a specific subfolder. I assumed using listBlobsByHierarchy was the one to use but I can not manage to get a list of blobs for that specific folder.

My code:

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

which returns

    { kind: 'prefix', name: '5f09b7ab047f9804a861672d/' } ITEM
    BlobPrefix: 5f09b7ab047f9804a861672d/
{ kind: 'prefix', name: '5f300119536cc32ce44c0013/' } ITEM
    BlobPrefix: 5f300119536cc32ce44c0013/
{ kind: 'prefix', name: 'test/' } ITEM
    BlobPrefix: test/

Now I would like to get a list of files inside folder 5f09b7ab047f9804a861672d for example

I am using the JS sdk to interact with Azure storage.

I have a hierarchy that looks like: demo (container name) / ID // list of files

So I am trying to get a list of files for a specific subfolder. I assumed using listBlobsByHierarchy was the one to use but I can not manage to get a list of blobs for that specific folder.

My code:

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

which returns

    { kind: 'prefix', name: '5f09b7ab047f9804a861672d/' } ITEM
    BlobPrefix: 5f09b7ab047f9804a861672d/
{ kind: 'prefix', name: '5f300119536cc32ce44c0013/' } ITEM
    BlobPrefix: 5f300119536cc32ce44c0013/
{ kind: 'prefix', name: 'test/' } ITEM
    BlobPrefix: test/

Now I would like to get a list of files inside folder 5f09b7ab047f9804a861672d for example

Share Improve this question asked Aug 9, 2020 at 14:57 MMXX11MMXX11 1372 gold badges3 silver badges12 bronze badges 1
  • Do you have any other concerns? – Jim Xu Commented Aug 11, 2020 at 0:55
Add a comment  | 

1 Answer 1

Reset to default 20

with azure node storage sdk, we can use te method listBlobsFlat and listBlobsByHierarchy to list blobs. The two methods have some differences. The method listBlobsFlat can list all blobs. The method listBlobsByHierarchy just can just list top folder and blobs, which like you run "dir" under C:/. Besides, if you want to list sub blobs in the subfolder, we need to use prefix.

For example

My container structure is as below

hello.txt
...
test
  test.txt
  test1
     data.json 

Code(list blobs in the folder test )

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

发布评论

评论列表(0)

  1. 暂无评论