AWS-SDK S3 deleteObjects返回MalformedXML?

使用aws-sdk(2.0.18)作为node.js,我试图用deleteObjects方法删除多个对象。

 delete: function (objects, callback) { var s3delete = new AWS.S3(); var params = { Bucket: config.s3.bucket, Delete: { Objects: objects } }; s3delete.deleteObjects(params, function (err, deleted) { if (err) { console.log(err, err.stack); return callback(err); } return callback(null, deleted); }); } 

我的params对象看起来像这样:

 { Bucket: 'bucketname', Delete: { Objects:[ {"Key":"folder/file.extension"}, {"Key":"folder/file.extension"}, {"Key":"folder/file.extension"}, {"Key":"folder/file.extension"}, {"Key":"folder/file.extension"}, {"Key":"folder/file.extension"}, {"Key":"folder/file.extension"} ] } } 

这将返回以下错误:

 { message: "The XML you provided was not well-formed or did not validate against our published schema", code: "MalformedXML", time: "2014-10-11T10:35:52.525Z", statusCode: 400, retryable: false } 

根据API规范 ,这应该工作。 仅供参考:我从Mongoose模型传入objects参数,它在Mongoose中保存为Mixed。

这是由于Mongoose在原始objects数组中返回格式错误的JSON对象造成的。

为了解决这个具体问题,我不得不创build一个新的对象,并推送他们到一个新的数组,在这个特定的情况下:

 var s3Objects = []; objects.forEach(function(ele, index, arr) { console.log(index + ': ' + ele.Key); var thisKey = { Key: ele.Key }; s3Objects.push(thisKey); }); 

然后通过s3Objects传递给参数:

 var params = { Bucket: config.s3.bucket, Delete: { Objects: properObjects } }; 

现在起作用了。