【问题标题】:Uploading JSON Object using s3.putObject uploads key but not the value使用 s3.putObject 上传 JSON 对象会上传键而不是值
【发布时间】:2020-04-24 13:04:01
【问题描述】:

我正在制作一个简单的 json 对象并使用 s3.putObject 函数将其上传到数字海洋。上传没有问题,但是当我在数字海洋上看它时,json对象中只有key,值显示{}

这是创建 JSON 并上传的代码:

async function sendErrorData(error){
  var errorfile = {
    'errorLog' : error
  }
  console.log(errorfile)

  const params = {
    Body: JSON.stringify(errorfile),
    Bucket: 'MyBucket'
    Key: 'errors.json',
    ContentType: "application/json"
  };

  await uploadToDO(params)
  .then((data) => console.log(JSON.stringify(data)))
  .catch((err) => console.log(JSON.stringify(err)))

  console.log(errorfile)
}

function uploadToDO(params) {
  return s3.putObject(params).promise()
}

上传前后的控制台日志显示该对象完全正常,但一旦上传,它就会丢失这样的值。

{
    "errorLog": ReferenceError: ....
}

已上传:

{
    "errorLog": {}
}

【问题讨论】:

    标签: node.js json amazon-s3 aws-sdk aws-sdk-js


    【解决方案1】:
    {
        "errorLog": ReferenceError: ....
    }
    

    从外观上看是无效的 JSON。您要求 AWS 上传为 application/json 文件,但并非如此失败。

    因此当你构造错误文件时

    var errorfile = {
        'errorLog' : JSON.stringify(error)
      }
    

    注意:这可能会将错误保存为字符串而不是 JSON 对象。如果您需要它作为 JSON 对象,您需要自己构建它。

    【讨论】:

    • 这获取了错误对象并将其转换为“{}”
    • 事实证明,如果我只使用包含一串信息的error.stack 就可以了。
    【解决方案2】:

    您在函数调用uploadToDO(params) 上是awaiting。但是函数uploadToDO 没有定义为异步函数。

    应该是:

    async function uploadToDO(params) {
      return s3.putObject(params).promise()
    }
    

    希望这会有所帮助。

    【讨论】:

    • 试着告诉我。
    • 不幸的是它没有任何区别
    猜你喜欢
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-07
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    相关资源
    最近更新 更多