Javascript S3 putObject中的SignatureDesNotMatch错误

Javascript S3 putObject中的SignatureDesNotMatch错误,javascript,amazon-web-services,amazon-s3,Javascript,Amazon Web Services,Amazon S3,我正在使用AWS Javascript SDK将文件放入S3。以下代码旨在将用户化身上传到S3。我现在正在对accessKeyId和secretAccessKey进行硬编码,并获取用于从web表单上载的文件和密钥 document.getElementById("upload-button").onclick = function() { const key = document.getElementById("key-text").value; var file = do

我正在使用AWS Javascript SDK将文件放入S3。以下代码旨在将用户化身上传到S3。我现在正在对accessKeyId和secretAccessKey进行硬编码,并获取用于从web表单上载的文件和密钥

 document.getElementById("upload-button").onclick = function() {
     const key = document.getElementById("key-text").value;
     var file = document.getElementById("file-chooser").files[0];

     const S3 = new AWS.S3({
      signatureVersion: "v4",
      apiVersion: '2006-03-01',
      accessKeyId: 'ACCESS_KEY_ID',
      secretAccessKey: 'SECRET_ACCESS_KEY',
      region: 'us-west-2'
    })

      S3.putObject({
        Key: key,
        Bucket: 'my-bucket-name',
        Body: file,
      }, (err, data) => {
        if (err) {
          alert("Error: " + err);
        } else {
          alert("Upload successful: " + data);
        }
      })
  }
 document.getElementById("upload-button").onclick = function() {
     const key = document.getElementById("key-text").value;
     var file = document.getElementById("file-chooser").files[0];

     const S3 = new AWS.S3({`
      signatureVersion: "v4",
      apiVersion: '2006-03-01',
      accessKeyId: 'ACCESS_KEY_ID',
      secretAccessKey: 'SECRET_ACCESS_KEY',
      region: 'us-west-2'
    })

      S3.putObject({
        Key: key,
        Bucket: 'ilarp-data-prod-1',
        Body: file,
      }, (err, data) => {
        if (err) {
          alert("Error: " + err);
        } else {
          alert("Upload successful: " + data);
        }
      })
  }

上面的代码给了我一个SignatureDesNotMatch的错误返回,我对此感到困惑,因为我认为我是让API进行签名的,而这个的早期版本(不幸的是,我无法复制)没有给我这个错误。

结果是这是一个引导错误。我的访问密钥ID和机密访问密钥不匹配。尽管我检查了十几次,我还是弄错了。很抱歉。如果您来到这里想知道这一点,请知道每个程序员每隔一段时间都会犯一个愚蠢的错误。

确保服务器上的时间同步正确。签名URL的签名完全在本地完成,在这种情况下,在浏览器中(不推荐),而不是通过服务API完成。在您使用签名的URL之前,该服务不知道该URL。你能给我们看一下S3的全部错误输出吗?谢谢你,Michael。后来我意识到我的测试与accessKeyId和secretAccessKey不匹配,这就是为什么它告诉我签名不匹配。因为它没有。尽管针对这个问题多次检查字符串,但我仍然没有找到它。很抱歉。是的,我正在浏览器中对URL进行签名,API就是这么做的。事实证明,IAM用户的权限非常有限,这就是为什么我愿意将他们的凭据公开给浏览器的原因。我确信还有其他方法可以做到这一点……我已经更改了访问密钥,当粘贴机密部分时,它将粘贴到上一个机密中使用的特殊字符的一半。我花了至少一个小时试图弄清楚为什么会发生这个错误,这肯定是我遇到的最不具描述性的错误之一,因为它似乎指向了完全不同的东西。