使用预签名 URL 和来自浏览器的 ng-file-upload 将文件上传到 AWS S3 时出现 403 签名不匹配
403 Signature not matched in uploading a file to AWS S3 with Pre-Signed URL and ng-file-upload from Browser
我在 angular 应用程序中使用 ng-file-upload 将文件发送到 AWS-S3。
Upload.http({
url: '/presignedurl',
headers : {
'Content-Type': file.type
},
data: file
})
它给我 403 禁止错误说
<Code>SignatureDoesNotMatch</Code>
<Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>
AWS S3 需要 binary/octet-stream 因此您可以在 JavaScript 中使用 FileReader class 将文件数据转换为 binary/octet-stream
用这个
替换你的代码
var reader = new FileReader();
var xhr = new XMLHttpRequest();
xhr.open("PUT", $scope.url);
reader.onload = function(evt) {
xhr.send(evt.target.result);
};
reader.readAsArrayBuffer($files[file]);
你可以试试这样的
var config = {
url: result.signed_request,
headers: {
"Content-Type": files[0].type != '' files[0].type : 'application/octet-stream'
},
method: 'PUT',
data: files[0]
};
Upload.http(config);
我在 angular 应用程序中使用 ng-file-upload 将文件发送到 AWS-S3。
Upload.http({
url: '/presignedurl',
headers : {
'Content-Type': file.type
},
data: file
})
它给我 403 禁止错误说
<Code>SignatureDoesNotMatch</Code>
<Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>
AWS S3 需要 binary/octet-stream 因此您可以在 JavaScript 中使用 FileReader class 将文件数据转换为 binary/octet-stream
用这个
替换你的代码var reader = new FileReader();
var xhr = new XMLHttpRequest();
xhr.open("PUT", $scope.url);
reader.onload = function(evt) {
xhr.send(evt.target.result);
};
reader.readAsArrayBuffer($files[file]);
你可以试试这样的
var config = {
url: result.signed_request,
headers: {
"Content-Type": files[0].type != '' files[0].type : 'application/octet-stream'
},
method: 'PUT',
data: files[0]
};
Upload.http(config);