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 } };
现在起作用了。