首页 > 解决方案 > 从 s3 存储桶中获取具有相同前缀的多个对象

问题描述

我在 s3 存储桶中有多个文件夹,每个文件夹都包含一些.txt文件。现在我想.txt使用 javascript API 从给定文件夹中获取 10 个文件。例如:路径是这样的

s3bucket/folder1/folder2/folder3/id

现在文件夹id是包含多个 .txt 文件的文件夹。idfolder3中有多个文件夹。我想传递并获得 10 个具有前缀的ids3 对象。id这可以使用 listObjectsV2 吗?如何将响应限制为仅 10 个对象。

                                              ____obj1.txt
                                 ______id1----|____obj2.txt
                                 |            _____obj3.txt
                                 |_____ id2---|____obj4.txt
s3bucket/folder1/folder2/folder3-|            ____obj5.txt
                                 |_____ id3---|____obj6.txt

所以如果我通过

var params= {Bucket:"s3bucket",Key:"folder1/folder2/folder3/id1"}

我应该得到obj1.txtobj2.txt回应。

标签: amazon-web-servicesamazon-s3aws-sdk

解决方案


您使用的是哪种S3方法?我建议使用listObjectsV2来实现你的目标。可能的调用可能如下所示

const s3 = new AWS.S3();
const { Contents } = await s3.listObjectsV2({
    Bucket: 's3bucket',
    Prefix: 'folder1/folder2/folder3/id1',
    MaxKeys: 10
}).promise();

要获取对象值,您需要调用getObject每个Key.

const responses = await Promise.all((Contents || []).map(({ Key }) => (
    s3.getObject({
        Bucket: 's3bucket',
        Key
    }).promise()
)));

推荐阅读