gpt4 book ai didi

javascript - AWS S3 ajax PUT 返回 'The request signature we calculated does not match the signature you provided' ?

转载 作者:行者123 更新时间:2023-11-30 17:11:10 25 4
gpt4 key购买 nike

我正在尝试通过预签名 URL 将文件上传到 S3。我已经通过使用 curl

测试该 URL 确实有效
curl --request PUT --upload file {filename} "{url}"

它把它推到那里 A-OK。

但是,当从 javascript 尝试时,我收到此消息:

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

我已经采取了尽可能多的调试步骤——例如,确保内容类型和内容长度在预先签名的 url 和我实际尝试上传的内容之间匹配。

我找到了这个 SO Thread并尝试了其中的一切:

  • 我的 key 没有尾随空格或斜杠
  • 我的存储桶名称中没有斜杠。
  • 尝试对我的 key 进行 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]);

});


});

最佳答案

创建预签名 URL 时,您指定的内容类型是 image/png 还是任何内容类型?

如果您不是,因为您在浏览器上传中包含了 Content-Type,亚马逊可能指的签名不匹配是 ajax PUT 确实有一个 Content-Type header ,但签名 URL 上的签名没有。

我最近遇到了这个问题,因为我正在使用 .NET AWSSDK 创建预签名的 URL,并且在生成 URL 时没有指定内容类型。

从一些普通的示例 C# 代码上传工作正常,但在我的浏览器应用程序中失败,因为我使用的框架自动附加了 Content-Type header ,导致不匹配。使用网络调试器重新播放请求(我正在使用 Fiddler ),并从浏览器的请求中删除 Content-Type header ,这让我弄清楚是什么导致了我的不匹配。

关于javascript - AWS S3 ajax PUT 返回 'The request signature we calculated does not match the signature you provided' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26977822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com