403使用预签名URL和浏览器中的ng-file-upload将文件上载到AWS S3时,签名不匹配

时间:2016-03-10 17:07:03

标签: amazon-s3 ng-file-upload

我正在使用ng-file-upload将文件发送到我的角度应用程序中的AWS-S3。

Upload.http({
  url: '/presignedurl',
  headers : {
    'Content-Type': file.type
  },
  data: file
})

它给了我403 Forbidden错误说

<Code>SignatureDoesNotMatch</Code>
<Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>

2 个答案:

答案 0 :(得分:2)

AWS S3需要二进制/八位字节流,因此您可以使用JavaScript中的FileReader类将文件数据转换为二进制/八位字节流

用此

替换您的代码
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]);

答案 1 :(得分:0)

您可以尝试这样的事情

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);