【发布时间】:2015-07-23 02:11:44
【问题描述】:
我正在尝试通过预签名 URL 将文件上传到 S3。我已经通过curl 测试该 URL 确实有效
curl --request PUT --upload file {filename} "{url}"
它把它推到那里 A-OK。
但是,当我从 javascript 中尝试它时,我收到了这条消息:
我们计算的请求签名与您提供的签名不匹配。检查您的密钥和签名方法。
我已经采取了尽可能多的调试步骤——例如,确保预签名 url 和我实际尝试上传的内容之间的内容类型和内容长度匹配。
我找到了这个SO Thread 并尝试了其中的所有内容:
- 我的密钥没有尾随空格或斜杠
- 我的存储桶名称中没有斜杠。
- 尝试对我的密钥进行 URL 编码 -- 没有区别
- 确保我的键名符合要求
所以,我有点不知所措。谁能确定导致 S3 拒绝此请求的原因?
Javascript:
$(document).ready(function () {
$('[type=submit]').click(function (evt) {
evt.preventDefault();
console.log($('#id_attachment').get(0).files[0].size);
var reader = new FileReader();
reader.onloadend = function (evt) {
console.log(evt.target.result);
$.ajax({
url: 'https://bucketname.s3.amazonaws.com/simple.png?Signature=vYIEOmAay9v6zwB1cz78FhXv6Yo%3D&Expires=1416243285&AWSAccessKeyId=ACCESSKEY',
type: 'PUT',
contentType: "image/png",
data: evt.target.result,
success: function () {
console.log('Uploaded data successfully.');
}
});
};
reader.readAsBinaryString($('#id_attachment').get(0).files[0]);
});
});
【问题讨论】:
-
另一个可能的原因是您的计算机本地时间与亚马逊的时间有明显的偏差。超过一分钟的偏移量会为我触发此错误。
-
这种情况下的错误信息是不同的。
标签: javascript amazon-web-services amazon-s3