在我的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": []
}]
});
但它不是显示内容的正确方法。 请帮我找一个解决方案
答案 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)