获取子文件夹 Azure 中的 blob 列表
Posted
技术标签:
【中文标题】获取子文件夹 Azure 中的 blob 列表【英文标题】:Get list of blobs in subfolder Azure 【发布时间】:2020-11-29 07:51:09 【问题描述】:我正在使用 JS sdk 与 Azure 存储进行交互。
我的层次结构如下所示: 演示(容器名称) / ID // 文件列表
所以我试图获取特定子文件夹的文件列表。我假设使用 listBlobsByHierarchy
是要使用的,但我无法获取该特定文件夹的 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`);
返回
kind: 'prefix', name: '5f09b7ab047f9804a861672d/' ITEM
BlobPrefix: 5f09b7ab047f9804a861672d/
kind: 'prefix', name: '5f300119536cc32ce44c0013/' ITEM
BlobPrefix: 5f300119536cc32ce44c0013/
kind: 'prefix', name: 'test/' ITEM
BlobPrefix: test/
现在我想获取文件夹 5f09b7ab047f9804a861672d 中的文件列表,例如
【问题讨论】:
您还有其他顾虑吗? 【参考方案1】:使用 azure node storage sdk,我们可以使用 te 方法 listBlobsFlat
和 listBlobsByHierarchy
列出 blob。这两种方法有一些区别。方法listBlobsFlat
可以列出所有的blob。方法listBlobsByHierarchy
只能列出***文件夹和blob,就像您在C:/下运行“dir”一样。另外,如果要列出子文件夹中的子blob,我们需要使用prefix
。
例如
我的容器结构如下
hello.txt
...
test
test.txt
test1
data.json
代码(列出文件夹 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);
);
【讨论】:
如果对你有用,可以accept it as an answer吗?以上是关于获取子文件夹 Azure 中的 blob 列表的主要内容,如果未能解决你的问题,请参考以下文章
仅从 Azure 存储 [Azure-Blob][REST] 中的 Blob 列表获取特定元数据
如何使用 C# 中的 Azure.Storage.Blobs 从 Azure 存储 Blob 以 ByteArray 格式获取文件