S3 listObjects 递归节点

Zai*_*een 4 javascript amazon-s3 amazon-web-services node.js ecmascript-6

我想递归获取 S3 存储桶文件夹中的所有文件。我想实现与ls -RLinux 中的命令相同的行为。

这是一个例子

my_folder
  |_abc
  | |_abc_file.txt
  | |_xyz
  |   |_xyz_file.txt
  |
  |_file.txt
Run Code Online (Sandbox Code Playgroud)

考虑上面的目录结构。如果我做

 const data = await s3.listObjectsV2({
    Prefix: 'my_folder/',
    Bucket: bucket,
    Delimiter: `/`,
}).promise();
Run Code Online (Sandbox Code Playgroud)

目前,我得到以下信息data

-CommonPrefixes: ["abc"]
-Contents:["file.txt"]
Run Code Online (Sandbox Code Playgroud)

预期的行为是:

- Contents: ["abc/abc_file.txt", "abc/xyz/xyz_file.txt", "file.txt"]
Run Code Online (Sandbox Code Playgroud)

我尝试使用ES6 生成器函数递归函数来解决这个问题,但最终得到了很多混乱的代码。

我正在使用 S3 节点 SDK

Joh*_*ein 8

Amazon S3 是一种不使用目录的平面对象存储系统。相反,对象的键(文件名)包含对象的完整路径。目录会根据现有对象的路径神奇地“出现”,并且稍后当该路径中没有对象时会消失。

ACommonPrefix在 Amazon S3 中相当于显示子目录。

ListObjects()使用Delimiter参数(例如Delimiter='/')调用时,字段中返回子目录列表CommonPrefixes。这允许像传统存储系统一样通过目录进行递归。如果删除此参数,则将返回具有给定前缀的所有对象,而不仅仅是“当前目录”。