如何通过AWS-SDK方法listObjects获取文件夹

时间:2019-08-01 14:42:08

标签: javascript aws-sdk

我试图使用软件包aws-sdk和方法listObjects

来获取文件夹列表。

但是我要在这些文件夹中获取文件,我想离开它们并仅使用文件夹,例如:

const AWS = require('aws-sdk');
const { Contents: files } = await new AWS.S3()
     .listObjects({
        Bucket : 'myBucketName',
        Prefix : `configs/config2`
     })
     .promise();

响应(我已经简化了)是

[ { Key: 'configs/config2/0.0.0/index.js'},
  { Key: 'configs/config2/0.0.1/index.js'},
  { Key: 'configs/config2/0.1.0/index.js'},
  { Key: 'configs/config2/0.2.0/index.js'} ]

我的目标是只获取文件夹,我不想获取脚本

[ { Key: 'configs/config2/0.0.0'},
  { Key: 'configs/config2/0.0.1'},
  { Key: 'configs/config2/0.1.0'},
  { Key: 'configs/config2/0.2.0'} ]

1 个答案:

答案 0 :(得分:0)

嗯,它是一种简单的字符串操作方式。您使用string.lastIndexOf的组合来查找'/'char的最后一次出现:

  

lastIndexOf()方法返回字符串中最后一次出现指定值的位置。使用string.lastIndexOf查找/的最后一次出现。

     

注意:从头到尾搜索字符串,但返回从头开始的索引,位置为0。

     

如果永远不会出现要搜索的值,则此方法返回-1。

     

注意:lastIndexOf()方法区分大小写!

然后将其与string.slice结合以摆脱其余部分:

  

slice()方法提取字符串的一部分并将其作为新字符串返回,而无需修改原始字符串。

您会得到类似的信息:

folderPath = filePath.slice(0, filePath.lastIndexOf('/'))

如果您有一个字符串数组,则jsut将该字符串作为.map方法的返回。

AFAIK,您无法发送仅列出文件夹的请求,因为“文件夹”实际上是可视化方式。存储桶实际上将所有对象存储在一起,如果它们的名称中包含“ /”,它将显示它们,就好像它们在文件夹下一样。