Javascript 使用一个键数组将多个s3对象推入一个数组 const AWS=require(“AWS sdk”); const s3=新的AWS.s3(); 函数getAttachments(文件、存储桶){ var paramsArray=[]; var attachmentArray=[]; 对于(var a=0;as3.getObject(x,函数(err,数据){ 如果(错误){ 控制台日志(err); } 附件({ 文件名:x.Key, 内容:data.Body }); 控制台日志(附件) }) ) } var附件=['a.doc','b.doc','c.doc','d.doc','e.doc'] 获取附件(附件、, ‘示例桶’)
我想记录一个对象数组,每个对象以键作为文件名,以缓冲区字符串作为内容。但是,在本例中,我记录了多个数组,这些数组的大小随着附件数组中每个元素的大小而增加 它们的格式正确,例如:Javascript 使用一个键数组将多个s3对象推入一个数组 const AWS=require(“AWS sdk”); const s3=新的AWS.s3(); 函数getAttachments(文件、存储桶){ var paramsArray=[]; var attachmentArray=[]; 对于(var a=0;as3.getObject(x,函数(err,数据){ 如果(错误){ 控制台日志(err); } 附件({ 文件名:x.Key, 内容:data.Body }); 控制台日志(附件) }) ) } var附件=['a.doc','b.doc','c.doc','d.doc','e.doc'] 获取附件(附件、, ‘示例桶’),javascript,arrays,node.js,loops,amazon-s3,Javascript,Arrays,Node.js,Loops,Amazon S3,我想记录一个对象数组,每个对象以键作为文件名,以缓冲区字符串作为内容。但是,在本例中,我记录了多个数组,这些数组的大小随着附件数组中每个元素的大小而增加 它们的格式正确,例如:[{filename:a.doc,content:'Buffer String'}],但我只需要一个数组,其中包含以该格式返回的5个对象 有人能告诉我怎么做吗?只需将您的代码更改为以下代码: const AWS=require(“AWS sdk”); const s3=新的AWS.s3(); const attachme
[{filename:a.doc,content:'Buffer String'}]
,但我只需要一个数组,其中包含以该格式返回的5个对象
有人能告诉我怎么做吗?只需将您的代码更改为以下代码:
const AWS=require(“AWS sdk”);
const s3=新的AWS.s3();
const attachments=['a.doc','b.doc','c.doc','d.doc','e.doc']
getAttachments(附件、存储桶)
.then(console.log)
.catch(控制台错误);
函数getAttachments(文件、存储桶){
返回files.map(filename=>getAttachment(filename,bucket));
}
函数getAttachment(文件名,bucket){
返回新承诺((解决、拒绝)=>{
常量参数={
桶:桶,
关键字:文件名
};
s3.getObject(参数,(错误,数据)=>{
如果(错误)返回拒绝(错误);
返回解析({
filename:filename,
内容:data.Body
});
});
});
}
这是我试图从ascendon1 bucket下载的文件名列表
下面是AJAX请求
const AWS = require("aws-sdk");
const s3 = new AWS.S3();
function getAttachments(file, bucket) {
var paramsArray = [];
var attachmentArray = [];
for (var a = 0; a < file.length; a++) {
paramsArray.push({
Bucket: bucket,
Key: file[a]
});
}
paramsArray.map(x = > s3.getObject(x, function (err, data) {
if (err) {
console.log(err);
}
attachmentArray.push({
filename: x.Key,
content: data.Body
});
console.log(attachmentArray)
})
)
}
var attachments = ['a.doc', 'b.doc', 'c.doc', 'd.doc', 'e.doc']
getAttachments(attachments,
'exampleBucket')
下面是NodeJS代码
var data = {fileNames: ['1.txt','2.txt']};
$.ajax({
type: "POST",
url: 'downloadFiles',
data: JSON.stringify(data),
processData: false,
dataType: "json",
contentType: 'application/json',
success:function(data){
alert(data);
}
});
app.post('/downloadFiles',函数(req,res){
var承诺=[];
var filesContent=[];
var filesToDownload=req.body.fileNames
对于(var z=0;zCan您可以展示一个您现在得到的示例吗?您的代码很混乱…为什么要创建变量attachmentsToSend
?它是不必要的。它是这样的=[{filename:'a.doc',bufferString}],{filename:a.doc,content:bufferString},{filename:'b.doc',content:bufferString}][{filename:a.doc,content:bufferString},{filename:'b.doc',content:bufferString},{filename:'c.doc',content:bufferString}]等等。对不起,我很快从其他东西中修改了它,这样我就可以在这里问这个问题了,我还没有那么有经验。谢谢你,这真的很有帮助。我本来应该用承诺开始,但需要更多地阅读它们!我不得不稍微修改它,但几乎可以正常工作,谢谢!这也完全可以,而且不需要太多别客气,谢谢!我真的应该用承诺,我会多看看的!
app.post('/downloadFiles',function(req,res){
var promises =[];
var filesContent = [];
var filesToDownload = req.body.fileNames
for(var z=0; z<req.body.fileNames.length;z++){
var fileName = filesToDownload[z];
promises.push(getAttachment(fileName));
}
Promise.all(promises).then(function(data){
for(var z=0; z<req.body.fileNames.length;z++){
var contents={
filename: filesToDownload[z],
content: data[z].Body
};
filesContent.push(contents);
}
console.log(filesContent);
}).catch(function(error){
console.log(error.stack);
})
})
function getAttachment(fileName){
var params ={
Bucket: "ascendon1",
Key: fileName
}
return s3.getObject(params).promise();
}