2017-11-01 3 views
0

は、フォルダには、構造AWSのすべてのオブジェクトをタイプでリストする方法は?私のAWS S3バケットで

my-folder 
------newdata.pdf 
------backtick.doc 
------jpg 
     ------red-rose.jpg 

私は私のためにユーザー するための正面図で同じように表示したい2つのファイル と以下のフォルダを1つ持つ私のフォルダをと呼ばれる、私がしていますaはangularjs指令を使用します。私はAWS-SDKを使用してJSON を変更する必要が私の応答値に基づいてclick here 私はここにすべてのオブジェクトを取得していますコード

router.get('/getall', function(req, res) 
    { 
     var params = { 
     Bucket: "bucket-name", 
     Prefix: "my-folder/" 
     }; 
     s3.listObjects(params, function(err, data) { 
     if (err) console.log(err, err.stack); // an error occurred 
     else 
     {  
      console.log(data.Contents); 
      res.json(data.Contents);  
     } 
     }); 
    }); 

角度JSでこの

[ { Key: 'my-folder/', 
    LastModified: 2017-10-31T07:51:22.000Z, 
    ETag: '"d41d8cd98f00b204e9800998ecf8427e"', 
    Size: 0, 
    StorageClass: 'STANDARD', 
    Owner: 
    { DisplayName: 'gsdg', 
     ID: 'fdfca70edcffab900fa878002905e80e31e119bf6c19beb0d1b3c278aac68789' } }, 
    { Key: 'my-folder/newdata.pdf', 
    LastModified: 2017-10-31T07:50:57.000Z, 
    ETag: '"54fa8a287448e8e9aac7fb56ea1ed6c4"', 
    Size: 9296, 
    StorageClass: 'STANDARD', 
    Owner: 
    { DisplayName: 'gsdg', 
     ID: 'fdfca70edcffab900fa878002905e80e31e119bf6c19beb0d1b3c278aac68789' } }, 
    { Key: 'my-folder/backtick.doc', 
    LastModified: 2017-10-31T07:51:02.000Z, 
    ETag: '"053626b75eb5db630b994959a3e6754e"', 
    Size: 436120, 
    StorageClass: 'STANDARD', 
    Owner: 
    { DisplayName: 'gsdg', 
     ID: 'fdfca70edcffab900fa878002905e80e31e119bf6c19beb0d1b3c278aac68789' } }, 

    { Key: 'my-folder/jpg/', 
    LastModified: 2017-10-31T11:09:50.000Z, 
    ETag: '"d41d8cd98f00b204e9800998ecf8427e"', 
    Size: 0, 
    StorageClass: 'STANDARD', 
    Owner: 
    { DisplayName: 'gsdg', 
     ID: 'fdfca70edcffab900fa878002905e80e31e119bf6c19beb0d1b3c278aac68789' } }, 
    { Key: 'my-folder/jpg/red-rose.jpg', 
    LastModified: 2017-10-31T11:10:16.000Z, 
    ETag: '"c4739c72ec3e76ca32a22e84a51e8f7c"', 
    Size: 125014, 
    StorageClass: 'STANDARD', 
    Owner: 
    { DisplayName: 'gsdg', 
     ID: 'fdfca70edcffab900fa878002905e80e31e119bf6c19beb0d1b3c278aac68789' } }, 

のように、この意志の応答であります私はこのように試しました

angular.forEach(response.data, function(value, key) 
        { 
         //var arraoffiles = value.Key.split('/'); 
         //console.log(arraoffiles); 
         if(arraoffiles.length == 2 && arraoffiles[1] != '') 
         { 
         $scope.roleList.push({ "roleName": arraoffiles[0], 
              "children": [{ 
               "roleName": arraoffiles[1], 
               "children": [] 
              }] 
             }); 

しかし、コンテンツを表示する適切な方法ではありません。 はここ

答えて

2

があなたのデータに基づいて、それは

var data=[ 
 
    { Key: 'my-folder'}, 
 
    { Key: 'my-folder/newdata.pdf'}, 
 
    { Key: 'my-folder/jpg/red-rose.jpg'}, 
 
    {Key: 'my-folder/backtick.doc'} 
 
] 
 

 
var ret=[]; 
 

 
data.forEach(
 
    i=>{ 
 
    var arr = i.Key.split('/'); 
 
    var root =searchChild(ret,arr[0]); 
 
    arr.shift(); 
 
    if(arr.length>0){ 
 
    var child= searchChild(root.children,arr[0]); 
 
     arr.shift(); 
 
     if(arr.length>0){ 
 
     var subChild= searchChild(child.children,arr[0]); 
 
     } 
 
    } 
 
    } 
 
) 
 
    
 
    
 
    function searchChild(root,value){ 
 
    if(!root.some(i=>i.roleName == value)){ 
 
     var i={ 
 
     roleName:value, 
 
     roleId:value, 
 
     children:[] 
 
     }; 
 
     root.push(i) 
 
     return i; 
 
    } 
 
    return root.find(i=>i.roleName == value) 
 
    } 
 
    
 
    console.log(ret)

Working demo

でどのくらいスケーラブル必ず私が作成したものではありません解決策を見つけるために私を助けてください
関連する問題