【问题标题】:AWS-SDK S3 deleteObjects Returning MalformedXML?AWS-SDK S3 deleteObjects 返回 MalformedXML?
【发布时间】:2014-12-06 11:20:03
【问题描述】:

使用 node.js 的 aws-sdk (2.0.18),我正在尝试使用 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 spec,这应该可以工作。仅供参考:我从 Mongoose 模型中传入 objects 参数,它在 Mongoose 中存储为 Mixed。

【问题讨论】:

    标签: json node.js amazon-web-services amazon-s3 mongoose


    【解决方案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 传递给参数:

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

    现在可以了。

    【讨论】:

      猜你喜欢
      • 2021-08-30
      • 2021-08-09
      • 2015-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-24
      • 2019-05-01
      相关资源
      最近更新 更多