Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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