将数据从AWS S3加载到jstree

时间:2018-10-26 07:05:44

标签: javascript jquery amazon-web-services amazon-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

问题是如何识别每个文件的父目录。有人可以提出解决方案吗? 谢谢

1 个答案:

答案 0 :(得分:0)

您可以在listObjectsV2中配置前缀字符串,以便它将返回以前缀字符串开头的对象。假设您具有/bucketName/folder1/file1.txt之类的内容,如果将前缀配置为folder1,它将返回folder1内的所有对象,包括folder1。 https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#listObjectsV2-property