如何列出AWS中具有类型的所有对象?

时间:2017-11-01 06:16:51

标签: angularjs node.js amazon-web-services amazon-s3

在我的AWS s3存储桶中,我有一个名为my-folder的文件夹,其中包含2个文件 并且下面的一个文件夹是结构

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

我想在前视图中为用户显示相同的方式 为此,我使用angularjs指令。 click here  基于我的响应值,我必须更改json 使用aws-sdk我在这里获取所有对象是代码

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);       
         }
       });
  });

这会像这样回应

[ { 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' } },

在角度js中,我尝试过这样的

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": []
                                            }]
                                         });   

但它不是显示内容的正确方法。 请帮我找一个解决方案

1 个答案:

答案 0 :(得分: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