【问题标题】:Fetching multiple objects with same prefix from s3 bucket从 s3 存储桶中获取具有相同前缀的多个对象
【发布时间】:2020-07-15 18:51:17
【问题描述】:

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

s3bucket/folder1/folder2/folder3/id

现在文件夹id 是包含多个.txt 文件的文件夹。 folder3 中有多个id 文件夹。我想通过 id 并获得 10 个以 id 为前缀的 s3 对象。这可以使用 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-services amazon-s3 aws-sdk


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 如何从响应中返回的对象键中获取对象值?
    • 你能解释一下第二部分吗?
    猜你喜欢
    • 2019-12-23
    • 2016-07-02
    • 2021-02-22
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多