2012-04-24 2 views
4

Я пытаюсь загрузить файл на s3 с помощью Java SDK. Код отлично работает на моей машине под управлением Windows 7 с jdk1.6.0_26, но при запуске на сервере Ubuntu Server 10.04 с Java Runtime Environment (см. 1.7.0-b147) появляется следующая ошибка, которая появляется исходя из https://github.com/amazonwebservices/aws-sdk-for-java/blob/master/src/main/java/com/amazonaws/auth/AbstractAWSSigner.java:Исключение с использованием Amazon s3 Java SDK

com.amazonaws.AmazonClientException: Unable to calculate a request signature: null Stack trace : com.amazonaws.auth.AbstractAWSSigner.signAndBase64Encode(AbstractAWSSigner.java:71) 
com.amazonaws.auth.AbstractAWSSigner.signAndBase64Encode(AbstractAWSSigner.java:55) 
com.amazonaws.services.s3.internal.S3Signer.sign(S3Signer.java:101) 
com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:234) 
com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:169) 
com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:2597) 
com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1025) 

вызов s3:

AWSCredentials c = new BasicAWSCredentials(accessKey, secretKey); 
AmazonS3Client client = new AmazonS3Client(c); 
String key = station + "/" + file.getName();   
client.putObject(new PutObjectRequest(bucket, key, file));  

Я новичок в Java и не знаю, как дальше устранить.

+0

Имея хороший ответ на этот вопрос будет очень полезно для этого гостя из будущего. Учитывая распространенность AWS (тогда и сейчас), возможно, сообщество должно переоценить необычайно узкую интерпретацию применимости этого вопроса для мировой аудитории Интернета. ;-) – Threadid

ответ

3

Моя кишка состоит в том, что JDK/JRE, который вы используете на своем сервере, не имеет соответствующего crypo/JCE. Либо установите high crypto pack, либо установите новый JDK/JRE, который включает в себя правильный крип.

Java Cryptography Extension можно скачать на дне: http://www.oracle.com/technetwork/java/javase/downloads/index.html

+0

Спасибо, я загрузил банки здесь http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html, и это, похоже, не сделало этого, все еще получая такое же точное исключение. – grant

+1

Найдите java.security на каждом из компьютеров, которые вы используете. Он должен указать, что у вас есть security.providers, а также их предпочтения. Узнайте, что у вас есть в версии Windows, которая отсутствует в версии Linux. –

+0

Единственный в Windows не в Linux - это Microsoft Crypto API. – grant