S3 putObject 中的 SignatureDoesNotMatch 错误

gis*_*her 3 javascript amazon-s3 amazon-web-services

我正在使用 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);
        }
      })
  }
Run Code Online (Sandbox Code Playgroud)

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

gis*_*her 9

事实证明,这是飞行员失误。我的 ACCESS_KEY_ID 和 SECRET_ACCESS_KEY 不匹配。虽然这个问题我检查了十几次,但我还是错了。对于那个很抱歉。如果您对此感到好奇,请知道每个程序员都会偶尔犯一个愚蠢的错误。