#node.js #amazon-web-services #amazon-s3
Вопрос:
Я хочу выполнить простую задачу: перечислить все объекты внутри определенной «папки» в s3. У меня есть такая структура папок в s3″
s3Bucket/folder1/folder2/some-txt-file.txt.
В моем случае мне нужно перечислить все в папке 2. Я хочу, чтобы узел выдал мне этот вывод
['some-txt-file.txt']
Я пишу функцию для этого.
Я использую цикл for, потому что у меня несколько файлов в папке 2, поэтому на выходе действительно должен быть список имен текстовых файлов.
Код выглядит так
const AWS = require('aws-sdk');
const s3Bucket = process.env.S3_BUCKET;
AWS.config.loadFromPath('./config_test.json');
const s3 = new AWS.S3();
async function list_everything_in_folder2(f1,f2){
var params = {
Bucket:s3Bucket,
Delimiter:'/',
Prefix:f1 '/' f2 '/'
}
const objs = await s3.listObjectsV2(params).promise();
var out=[];
for(obj of objs.CommonPrefixes){
out.push(obj.Prefix);
}
return out
}
В результате получается пустой список.
Интересно, однако, когда я игнорирую второй аргумент функции и помещаю свой префикс в параметры, подобные этому
var params = {
Bucket: 'top-bucket',
Delimiter: '/',
Prefix: f1 '/'
}
выход становится
['top-bucket/folder1/']
Кажется, я не могу просмотреть больше вложенных папок, он перестает работать после «первого появления разделителя», так сказать. Есть какие-нибудь идеи? Я искал ответы здесь и в других местах, но, судя по ним, я не делаю ничего плохого? Кстати, я совсем новичок в nodejs, так что объясни мне это, как будто мне 5 лет.
Спасибо
Ответ №1:
CommonPrefixes
содержит список повторяющихся префиксов в объектах между указанным разделителем. Другими словами, это список «подкаталогов» для текущего списка.
Список объектов находится внутри Contents
, поэтому измените цикл for на этот:
for(obj of objs.Contents){
out.push(obj.Key);
}
Это выведет объекты под этим префиксом, не считая объектов на уровень глубже. Если вы хотите получить полный рекурсивный список, начинающийся с указанного вами префикса, удалите Delimiter:'/',
его из своего params
.
Комментарии:
1. Да, я обнаружил это и в то же время, CommonPrefixes случайно оказались в этой функции из какого-то другого кода, который я писал, и я совершенно не осознавал тот факт, что я обращаюсь не к тому свойству. Спасибо, решено!