我希望能够从Amazon S3中检索键/值对,然后存储一些在Firebase中检索的信息,以便我可以在AngularJS中构建某种文件系统。<<<<<<<<<<<<<<<<<<<<<<<<<<<<
这个问题只能在firebase中存储。
现在,显然,您需要能够创建一个无限量的文件夹,并在这些文件夹中放置无限量的文件。
我的代码现在工作方式,如果要添加另一个子文件夹,则必须添加另一个If/else语句。我需要更动态的东西。
我有一个我在Angularjs中制作的脚本,可以从Amazon S3中检索键/值对,然后将其分解并根据返回的密钥将其存储在firebase中。
我将打破代码的位,以便我可以解释它,但是,我创建了一个带有整个块的JSFIDDLE:https://jsfiddle.net/lcr5p6qm/2/
首先,我使用服务从Amazon获得了键/值对。
storageService.getBucketDirectory({
'bucket' : bucket,
'directory' : 'code/'
}).then(function(code){
第二,我从firebase中删除上一个树,然后从s3中启动循环。
projectRef.child('code').remove();
angular.forEach(code, function(value, key){
var item = value.Key.replace('code/', '');
第三,如果两人表示它是在基础上,我会这样存储。我们更改键以创建文件的类型和名称。
if(!item.includes('/'))
{
var name = value.Key.replace('code/', '').replace('/', '').replace('+', ' ');
if(name.indexOf('.') == 0)
{
var type = null;
}
else
{
var type = value.Key.substr(value.Key.indexOf('.') + 1)
}
projectRef.child('code').child('/').push({
'Name' : name,
'Type' : type,
'Key' : value.Key,
'LastModified' : value.LastModified,
'Size' : value.Size
})
}
第四,如果两人不在基部,并且在钥匙中也有子文件夹,我们会更改钥匙,然后将其存储为此。如果没有子文件夹,我们只将其存储在文件夹中。
else {
var folder = item.substr(0, item.indexOf('/'));
if ((item.replace(folder + '/', '')).includes('/')) {
var subfolder = item.replace(folder + '/', '');
subfolder = subfolder.substr(0, subfolder.indexOf('/'));
var name = value.Key.replace('code/', '').replace(folder + '/', '').replace(subfolder + '/', '').replace('+', ' ');
if (name.indexOf('.') == 0) {
var type = null;
} else {
var type = value.Key.substr(value.Key.lastIndexOf('.') + 1)
}
projectRef.child('code').child(folder).child(subfolder).push({
'Name': name,
'Type': type,
'Key': value.Key,
'LastModified': value.LastModified,
'Size': value.Size
})
}
else {
var name = value.Key.replace('code/', '').replace(folder + '/', '').replace('+', ' ');
if (name.indexOf('.') == 0) {
var type = null;
} else {
var type = value.Key.substr(value.Key.indexOf('.') + 1)
}
projectRef.child('code').child(folder).push({
'Name': name,
'Type': type,
'Key': value.Key,
'LastModified': value.LastModified,
'Size': value.Size
})
}
}
最后,这变成了下面的东西。
- CSS
- main.css
- 归一化css
- Doc
- toc.md
- css.md
- 扩展。md
- FAQ.MD
- html.md
- js.md
- misc.md
- usage.md
- img
- .gitignore
- JS
- main.js
- plugins.js
- 供应商
- jquery-1.12.0.min.js
- Modernizr-2.8.3.min.js
太好了,它有效,对吗?好吧,如果您不想要第二级目录,并且我们都知道这还不够。
我的问题是,如果我们在/js/vendor/
文件夹中有另一个文件夹,它将破坏系统,名称和类型将包括子文件夹名称。
我需要一种方法来创建无限量的子文件夹并进行这项工作。
update
我提出了一些"清洁"代码,这些代码已在上面的链接中添加到我的JSFiddle中。这是"第二次尝试"的评论。这使我更接近我想要的东西,但没有进入子文件夹。
奖金:空文件夹呢?
firebase将接受类似路径的字符串作为.child()
的参数,因此您只需要关注操作键字符串即可获取此路径和文件名。您可以做这样的事情:
var testKey = 'code/some/long/path/filename.txt';
var lastSlash = testKey.lastIndexOf('/');
var filepath = testKey.substring(0, lastSlash); // 'code/some/long/path'
var filename = testKey.substr(lastSlash+1); // 'filename.txt'
projectRef.child(filepath).push({
'Name': filename
});