2014-10-11 109 views
1

對node.js使用aws-sdk(2.0.18),我試圖使用deleteObjects方法刪除多個對象。AWS-SDK S3 deleteObjects返回MalformedXML?

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 spec,這應該工作。僅供參考:我通過Mongoose Model的objects參數傳遞,它在Mongoose中保存爲Mixed。

回答

1

這是由於Mongoose在原始objects數組中返回格式錯誤的JSON對象造成的。

爲了專門解決這個問題,我不得不創建一個新的對象,並將其推到一個新的數組,在這個特定的情況下:

var s3Objects = []; 

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

然後在s3Objects傳遞給PARAMS:

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

它現在有效。

相關問題