Загрузить данные из aws s3 в jstree

У меня есть несколько каталогов в ведре aws S3. Мне нужно загрузить ту же структуру в jsTree (плагин jquery).

Моя проблема заключается в том, как идентифицировать родительский узел каждого элемента, поскольку aws S3 (listObjectsV2) идентифицирует каждый элемент как отдельные объекты, а не каталоги.

Вот пример того, что он возвращает

{ Key: 'private/Nifla/2)-M1-Kinematics-of-a-Particle-moving-in-a-Straight-Line-Questions.docx',
0|server  |     LastModified: 2018-09-04T06:24:18.000Z,
0|server  |     ETag: '"c3dbdb890c19ce5e289227e96a702dc8"',
0|server  |     Size: 1230564,
0|server  |     StorageClass: 'STANDARD' },
0|server  |   { Key: 'private/Nifla/2)-M1-Kinematics-of-a-Particle-moving-in-a-Straight-Line.pptx',
0|server  |     LastModified: 2018-09-04T06:16:45.000Z,
0|server  |     ETag: '"84aaa52152fcbc36768fca819e1bf84d"',
0|server  |     Size: 1166244,
0|server  |     StorageClass: 'STANDARD' },
0|server  |   { Key: 'private/Nifla/3)-M1-Dynamics-of-a-Particle-moving-in-a-Straight-Line-Questions.docx',
0|server  |     LastModified: 2018-09-04T06:29:21.000Z,
0|server  |     ETag: '"5d078bebd1edc40e5db9ff5f489df610"',
0|server  |     Size: 2247048,
0|server  |     StorageClass: 'STANDARD' },
0|server  |   { Key: 'private/Nifla/3)-M1-Dynamics-of-a-Particle-moving-in-a-Straight-Line.pptx',
0|server  |     LastModified: 2018-09-04T06:15:49.000Z,
0|server  |     ETag: '"d27ff757a5c6bf05d9e02ec80529dfad"',
0|server  |     Size: 1557098,
0|server  |     StorageClass: 'STANDARD' },
0|server  |   { Key: 'private/Nifla/6)-M1-Vectors-Questions.docx',
0|server  |     LastModified: 2018-07-24T05:44:39.000Z,
0|server  |     ETag: '"1e146a050cc4d4a8fd8919bb4fc0f151"',
0|server  |     Size: 2570995,
0|server  |     StorageClass: 'STANDARD' }

Хотя все эти файлы находятся в каталоге private / Nifla, они являются отдельными объектами для S3.

Вот как я пытался подогнать структуру под jsTree.

function s3ToJsTreeJsonConvertor(s3ObjectList){
    var data = []
    var files = s3ObjectList.Contents;
    console.log('----files-----');
    console.log(files);
    for (var i = 0; i < files.length; i++) {
        var Key = files[i].Key
        var filterRegex = new RegExp('(.pdf)');
        var isFolder = filterRegex.test(Key);
        if(!isFolder){
            continue;
        }
        console.log("///////////////",Key);
        var res = Key.split("/");
        console.log(">>>>>>>>>>>>>>>",res);
        for (var j=0;j< res.length;j++){
            var isFile = false;
            if(j===res.length-1){
                isFile = true;
            }
            if(j===0){
                data.push({ "id" : "node_"+i+"_"+j, "parent" : "#", "text" : res[j],"data":{"key":Key,"isFile":isFile } });
                continue;
            }
            data.push({ "id" : "node_"+i+"_"+j, "parent" : "node_"+i+"_"+(j-1), "text" : res[j],"data":{"key":Key,"isFile":isFile } });
        }
    }
    return data;

}

В результате получается следующая структура.

jsTree structure

Проблема в том, как определить родительский каталог каждого файла. Может ли кто-нибудь предложить решение этого? Спасибо

0
0
198
1

Ответы 1

Вы можете настроить строку префикса в вашем listObjectsV2, чтобы она возвращала объекты, начинающиеся со строки префикса. Допустим, у вас есть контент типа /bucketName/folder1/file1.txt. Если вы настроите префикс как folder1, он вернет все объекты внутри folder1, включая folder1. https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#listObjectsV2-property

Другие вопросы по теме