Получение нескольких объектов с одинаковым префиксом из корзины s3 - PullRequest
0 голосов
/ 14 июля 2020

У меня есть несколько папок в корзине s3, и каждая папка содержит несколько файлов .txt. Теперь я хочу получить только 10 .txt файлов из заданной папки с помощью javascript API. Например: путь выглядит примерно так

s3bucket/folder1/folder2/folder3/id

Теперь папка id - это та, которая содержит несколько файлов .txt. Внутри folder3 есть несколько папок id. Я хочу передать id и получить 10 объектов s3 с префиксом 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.txt и obj2.txt в ответ.

1 Ответ

0 голосов
/ 14 июля 2020

Какой метод 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()
)));
...