【问题标题】:How to get folder list from azure container?如何从 azure 容器中获取文件夹列表?
【发布时间】:2017-05-31 13:19:29
【问题描述】:

我想在 nodejs 中获取一个 azure 容器中的所有文件夹和文件

我正在使用 azure-storage 库来获取 blob,但找不到任何示例来列出容器下的所有文件夹。我正在将我的分析数据转储(导出)到 auzure 中的存储容器。现在我尝试阅读这些文件

我的存储结构喜欢

ios-analytics-full/ios_06cd82e4db0845b9bef73c5b22bea2fa/Event/2016-09-29/18/270b58c-04d7-4e5d-a503-cdce24a3940c_20160929_184723.blob

我想读取每天创建的所有文件夹以及这些文件夹下的文件

var containerName = "assist-ios-analytics-full";


blobService.listBlobsSegmented(containerName, null, {maxResults : 10}, function(err, result) {
    if (err) {
        console.log("Couldn't list blobs for container %s", containerName);
        console.error(err);
    } else {
        console.log('Successfully listed blobs for container %s', containerName);
        console.log(result.entries);
        console.log(result.continuationToken);
        res.json(result);
    }
});

最新的文件夹是今天的日期

ios-analytics-full/ios_06cd82e4db0845b9bef73c5b22bea2fa/Event/2017-05-31/18/270b58c-04d7-4e5d-a503-cdce24a3940c_20160929_184723.blob

【问题讨论】:

  • 任何云 BLOB 存储提供商中都没有文件夹。绝对不是亚马逊、Azure、Rackspace、Openstack。其中ALL 提供平面存储,带有特定字符,通常/ 用作模拟文件夹的占位符。根据提供者的不同,你可以请求所有以某个前缀开头的文件,相当于请求一个文件夹中的所有文件
  • 扁平存储的原因是文件夹需要递归,因此无法扩展到云存储
  • 但是auzre说容器里面有文件夹,我也给出了路径格式“ios_06cd82e4db0845b9bef73c5b22bea2fa/Event/2016-09-29/18/”
  • 所以如果我理解正确,您希望指定ios-analytics-full/ios_06cd82e4db0845b9bef73c5b22bea2fa/Event/{date e.g. 2016-09-29} 并查看那里的所有 blob 列表。对吗?
  • 是的,每天都会在容器中转储分析数据,我想读取这些数据

标签: node.js azure azure-blob-storage azure-application-insights


【解决方案1】:

您要使用的函数是listBlobsSegmentedWithPrefix

您要做的是将prefix 指定为ios_06cd82e4db0845b9bef73c5b22bea2fa/Event/{date e.g. 2017-05-31} 并将options.delimiter 指定为"",这将确保返回名称以上述前缀开头的所有blob。

所以你的代码将是:

blobService.listBlobsSegmentedWithPrefix(containerName, 'ios_06cd82e4db0845b9bef73c5b22bea2fa/Event/2017-05-31', null, {delimiter: "", maxResults : 10}, function(err, result) {
    if (err) {
        console.log("Couldn't list blobs for container %s", containerName);
        console.error(err);
    } else {
        console.log('Successfully listed blobs for container %s', containerName);
        console.log(result.entries);
        console.log(result.continuationToken);
        res.json(result);
    }
});

【讨论】:

  • 我们可以过滤这些数据,比如说我想要最新的文件夹(最后创建的)吗?如果我直到昨天才读取数据,那么我想在那之后读取数据应该有什么解决方案?
  • 正如@Panagiotis Kanavos 在您问题的 cmets 中提到的那样,Azure Blob 存储中没有文件夹。它们只是 blob 前缀。您需要做的是按日期对 blob 进行排序。同样不允许服务器端排序,因此您需要获取客户端上所有 blob 的列表并自己进行排序。 HTH。
  • 好的,但是我有超过 5000 条记录,如果我在单个请求中获取所有 blob 会非常慢。
  • 这是真的!您是否可以通过某个应用程序获取这些日志?
  • 我知道 :)。您可以做的一件事是从今天的日期开始并获取该日期的所有 blob。然后,如果您需要更多,您可以开始将日期减少 1 天并重复该过程。遗憾的是,您无法告诉 Azure 存储为您提供最新的 blob。这是您需要做的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-21
  • 2021-10-28
  • 2018-07-08
  • 2016-03-09
  • 2019-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多