Zai*_*een 4 javascript amazon-s3 amazon-web-services node.js ecmascript-6
我想递归获取 S3 存储桶文件夹中的所有文件。我想实现与ls -R
Linux 中的命令相同的行为。
这是一个例子
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
Amazon S3 是一种不使用目录的平面对象存储系统。相反,对象的键(文件名)包含对象的完整路径。目录会根据现有对象的路径神奇地“出现”,并且稍后当该路径中没有对象时会消失。
ACommonPrefix
在 Amazon S3 中相当于显示子目录。
当ListObjects()
使用Delimiter
参数(例如Delimiter='/'
)调用时,字段中返回子目录列表CommonPrefixes
。这允许像传统存储系统一样通过目录进行递归。如果删除此参数,则将返回具有给定前缀的所有对象,而不仅仅是“当前目录”。