2015-12-10 2 views
0

Я успешно загрузил файл на Amazon S3 с помощью запроса, подписанного URL-адреса, генерируемых библиотеки амазонки Java:Как устранить неполадки с ответом на запрос запроса ААЗАОН S3?

GeneratePresignedUrlRequest generatePresignedUrlRequest = 
    new GeneratePresignedUrlRequest(bucket, objectName) 

generatePresignedUrlRequest. 
    withContentType(contentType). 
    withMethod(HTTPMethod.PUT) 

URL url = s3client.generatePresignedUrl(generatePresignedUrlRequest) 

Я изменил HTTPMethod.PUT к HTTPMethod.GET и назвал его с теми же аргументами.

Когда я вставить полученный URL в браузере, я получаю:

<Error> 
<Code>SignatureDoesNotMatch</Code> 
<Message> 
The request signature we calculated does not match the signature you provided. Check your key and signing method. 
</Message> 
<AWSAccessKeyId>XXXX</AWSAccessKeyId> 
<StringToSign>GET 1449712291 /my-bucket/picture.png</StringToSign> 
.... 
</Error> 

Есть ли способ вывести так называемый StringToSign который используется из presigned объекта запроса для сравнения? Или есть другой способ устранить эту проблему?

ответ

2
withContentType(contentType) 

Эта линия не имеет смысла. Вы не установили бы Content-Type: для запроса GET, так как этот заголовок описывает, что вы , отправляя - что является «ничем» для типичного запроса GET. Поскольку это один из компонентов строки для подписи, а ответ об ошибке показывает, что S3 хочет, чтобы он был пустым, удаление этого должно решить проблему.

+1

Вы, сэр ... являются героем! –

+0

Спасибо. Рад был помочь. Не стесняйтесь присылать прибыльные проекты по разработке и консалтингу на моем пути. :) –