无法通过XMLHttpRequest通过签名请求上传到Amazon S3

时间:2015-11-24 13:13:06

标签: javascript heroku amazon-s3

我做了所有事情Heroku recommended,但我一直收到SignatureDoesNotMatch错误。有消息:

The request signature we calculated does not
match the signature you provided. Check your key
and signing method.

但我确实意味着要签署任何协议。我只想要一个可以直接下载文件的链接。

这是我在Node JS服务器上的aws配置。我用它们来生成签名请求。他们为我提供了很长的链接。

var s3_params = {
  Bucket: S3_BUCKET,
  Key: filename,
  Expires: 400,
  ContentType: fileType,
  ACL: 'public-read'
}

我是否正确地认为我不需要使用AWS密钥来上传带有签名请求的文件?

2 个答案:

答案 0 :(得分:1)

或者您可以查看我为简单起见编写的 mc 工具,您可以从https://github.com/minio/mc下载OS X,Linux和Windows的二进制文件

$ mc share download --expiry=400s <YOUR-S3-URL>

mc 也实现了&#39; - json&#39;输出,这样您就可以轻松地构建服务器端nodejs服务。没有--expiry URL与默认7天的到期共享。

$ mc share download --json s3.amazonaws.com/ferenginar/distrikt_2014-01-31T07_31_11-08_00.mp3 | jq . 

{
  "status": "success",
  "url": "https://s3.amazonaws.com/ferenginar/distrikt_2014-01-31T07_31_11-08_00.mp3",
  "share": "https://s3.amazonaws.com/ferenginar/distrikt_2014-01-31T07_31_11-08_00.mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAI6SNMUFOVIEFOZJA%2F20151125%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20151125T002135Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=082e01d815e6aee8bc567d1d86d79d635b5313337dfba46524f35cfc6858e857",
  "timeLeft": 604800000000000
}

希望这有帮助!

答案 1 :(得分:0)

问题在于凭据错误。我忘记了,我从AWS中删除了我的密钥。我重新创建它,现在一切正常。