javascript - S3 listObjects递归节点
问题描述
我想递归地获取 S3 存储桶文件夹中的所有文件。我想实现与ls -R
Linux 中的命令相同的行为。
这是一个插图
my_folder
|_abc
| |_abc_file.txt
| |_xyz
| |_xyz_file.txt
|
|_file.txt
考虑到上面的目录结构。如果我做
const data = await s3.listObjectsV2({
Prefix: 'my_folder/',
Bucket: bucket,
Delimiter: `/`,
}).promise();
目前,我得到以下信息data
:
-CommonPrefixes: ["abc"]
-Contents:["file.txt"]
预期的行为是:
- Contents: ["abc/abc_file.txt", "abc/xyz/xyz_file.txt", "file.txt"]
我尝试使用ES6 生成器函数和递归函数来解决这个问题,最终得到了很多混乱的代码。
我正在使用 S3 节点 SDK
解决方案
Amazon S3 是一个不使用目录的平面对象存储系统。相反,对象的键(文件名)包括对象的完整路径。目录会根据现有对象的路径神奇地“出现”,然后当该路径中没有对象时会消失。
ACommonPrefix
是显示子目录的 Amazon S3 等效项。
ListObjects()
使用Delimiter
参数(例如)调用时,在字段Delimiter='/'
中返回子目录列表。CommonPrefixes
这允许像传统存储系统一样通过目录进行递归。如果删除此参数,将返回具有给定前缀的所有对象,而不仅仅是“当前目录”。
推荐阅读
- generative-adversarial-network - 增加 WGAN 网络中的 image_size
- django - Heroku:gunicorn 和 waitress-serve 命令不起作用
- javascript - 如何用openlayers找到三点之间的角度?
- php - 在 PDO 中合并两个 MySQL 表并创建 CSV 输出
- pytorch - pytorch如何实现从输出层到输入层的反向传播
- ios - 如何寻找到 AVPlayer 的最后一帧
- c++ - 是否可以在 C++ 中声明两个变量 For-Each 循环?
- google-sheets - 如何对列中的最后 x 行求和?谷歌表格
- python - 如何从链接到 AWS Postgres RDS 的 Dash-Heroku 应用程序将数据下载到计算机中?
- android - Android NDK - 使用多个 NDK 构建构建应用程序