2016-03-10 2 views
2

Я использую ng-file-upload для отправки файла AWS-S3 в моем угловом приложении.403 Подпись не соответствует загрузке файла в AWS S3 с предварительно подписанным URL-адресом и ng-файлом-upload из браузера

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

AWS S3 нуждается в двоичную/октет-поток, так что вы можете использовать класс FileReader в JavaScript для преобразования файлов данных в двоичном/октет потока

Заменить код с этой

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]); 
+0

Это то, что я искал. Спасибо за ответ. – Ndkachare

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

Не могли бы вы дать небольшое объяснение/понимание того, как ваш ответ? –

Смежные вопросы