#java #angularjs #amazon-web-services
#java #angularjs #amazon-веб-сервисы
Вопрос:
Мы работаем над процессом загрузки, который получает с сервера предварительно указанный URL-адрес для загрузки файлов в нашу корзину s3. Наш запрос строится следующим образом
GeneratePresignedUrlRequest gpur = new GeneratePresignedUrlRequest(bucketName, file);
gpur.setMethod(HttpMethod.PUT);
gpur.setExpiration(expiration);
//gpur.setSSEAlgorithm(SSEAlgorithm.getDefault().getAlgorithm());
url = client.generatePresignedUrl(gpur);
и потребляется вот так
$http({
method: 'PUT',
url: gpur url,
transformRequest: angular.identity,
uploadEventHandlers: {progress: function(progress) {
file.uploadProgress = Math.round(progress.loaded / progress.total * 100);
}},
data: file,
})
который отлично работает. Файл перемещается в корзину без проблем. Однако, когда мы добавляем gpur.setSEEAlgorithm(SSEAlgorithm.getDefault().getAlgorithm())
обратно, мы получаем ошибку «SignatureDoesNotMatch». Что мы не понимаем об ошибке, так это то, что в <CanonicalRequest>
тегах значение x-amz-server-side-encryption
пусто.
Есть ли что-то очевидное, чего нам здесь не хватает?
РЕДАКТИРОВАТЬ: после небольшого исследования я нашел аналогичный вопрос здесь: https://salesforce.stackexchange.com/questions/114544/amazon-s3-specifying-sse-s3-with-pre-signed-urls-usingapex
Я добавил
headers:{
'X-Amz-Server-Side-Encryption': 'AES256',
},
на запрос, и он работает, хотя, похоже, он чувствителен к регистру.
Комментарии:
1. Сможете ли вы добавить свою правку в качестве ответа на свой вопрос для будущих читателей? Спасибо
Ответ №1:
Добавляю свою правку в качестве ответа. 🙂
После небольшого исследования я нашел аналогичный вопрос здесь: https://salesforce.stackexchange.com/questions/114544/amazon-s3-specifying-sse-s3-with-pre-signed-urls-usingapex
Я добавил
заголовки: { ‘X-Amz-Server-Side-Encryption’: ‘AES256’, }, на запрос, и он работает, хотя, похоже, чувствителен к регистру