节点亚马逊S3 PutObject上传无法上传多个文件(只上传一个),但说,它的工作

所以在我的路线,我有一个职位,让我发送一个多部分职位,然后被保存到一个数据库,并发送附件中的图片附加到亚马逊S3。 这是我的路线代码

exports.post = function(req, res){ var pictureNames = []; var s3Bucket = new AWS.S3({params: {Bucket: 'anonybox'}}); for(key in req.files){ tp = req.files[key].path; fn = req.files[key].name; ftype = req.files[key].type; pictureUrls.push(fn); fs.readFile(tp, function(err, fileBuffer){ var params = { Key: fn, Body: fileBuffer, ACL: 'public-read', ContentType: ftype }; s3Bucket.putObject(params, function(err, data){ if(err){ console.log("error" + err); }else{ console.log("worked, data: "+JSON.stringify(data)); } }); }); } messageObject = { message: req.body.message, staytime: req.body.staytime, picturenames: pictureNames }; var postMessage = new MessageModel(messageObject); postMessage.save(function(err, doc){ if(err || !doc){ throw 'Error'; }else{ console.log("created"); console.log(doc); // res.json(doc); } }); 

当我尝试在发布请求中发送两个图像时在控制台中putObject函数返回:

  worked, data: {"ETag":"\"24c1d19724ca10f40bc633aa29315931\""} worked, data: {"ETag":"\"4201e2a997779c5595dc35925e954191\""} 

但是,只有其中一个文件出现在s3的存储桶中,这是req.files对象中的最后一个文件。

问题不在于aws-sdk在fs.readfile中读取第一个文件之前,for循环保持运行,解决scheme在此处详细介绍asynchronous读取和cachingnodejs中的多个文件

我有两个file upload类似的问题,我只是提到后代,以防将来有一个类似的问题:我的图像上传没有embedded到for循环,但只是顺序调用s3.putObject( )。 第一张图片在页面刷新上显示得很好,但是第二张图片上传出现了“无声无息”的失败现象。 答案是,由于某种原因,第一个file upload会更新caching,但第二个图像上传不会更新caching,因此看起来不起作用(即使实际的文件传输到s3实际上是工作的)。 如果您遇到问题,请尝试清除caching,然后查看新的上传是否确实正常,但您的浏览器未正确显示。