заранее извиняюсь, если это повторение другого вопроса, хотя я потратил целый день на исследования и эксперименты без успеха:
Я пишу приложение для мгновенных сообщений на Java, где яхранение изображений профиля клиента в корзинах AWS S3.Я успешно сохранил и получил файлы на моем компьютере.программно с использованием Java S3 JDK, но я даже не могу установить успешное соединение с моим AWS S3 (используя учетные данные и регионы) через любую другую машину после экспорта моего проекта (с использованием исполняемого файла Eclipse JAR с вложенным внешним JARS)
Ниже приведен упрощенный тестовый код:
private void initiateS3Connection() {
AmazonS3 s3Client = null;
try {
JOptionPane.showMessageDialog(null, "Initiating Application");
BasicAWSCredentials awsCreds = new BasicAWSCredentials("<access-key>",
"<secret-access-key>"); //REAL keys placed in code properly, works when run through personal comp.
JOptionPane.showMessageDialog(null, "Created basic aws credentials");
Regions region = Regions.fromName("us-east-1");
JOptionPane.showMessageDialog(null, "Created region");
s3Client = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(awsCreds))
.withRegion(region).build();
// Currently, program stops here indefinitely via JAR exportation, no exceptions
// thrown
JOptionPane.showMessageDialog(null, "Created AmazonS3Client: " + s3Client);
File s3Object = getProfileImage("4profileimagebucket", "4_profile_image", s3Client);
JOptionPane.showMessageDialog(null, s3Object);
Runtime.getRuntime().exec("rundll32 url.dll, FileProtocolHandler " + "s3imagetest.jpg");
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e.getMessage());
}
}
public static File getProfileImage(String bucket_name, String key_name, AmazonS3 s3Client) throws IOException {
File profile_image_file = new File("s3imagetest.jpg");
S3Object s3Object = s3Client.getObject(new GetObjectRequest(bucket_name, key_name));
InputStream inputStream = s3Object.getObjectContent();
byte[] contentBuffer = new byte[1024];
BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(profile_image_file));
int bytesRead = 0;
while ((bytesRead = inputStream.read(contentBuffer)) != -1) {
outputStream.write(contentBuffer, 0, bytesRead);
}
return profile_image_file;
}
}
Этот код отлично работает на моем персональном компе через Eclipse, даже загружая и открывая изображение в моем контейнере S3.
При выполнении на исполняемом JAR и запуске на другом компьютере программа останавливается непосредственно после того, как JOptionPane показывает, что область была показана.Не генерируется никаких исключений, так как JOptionPane в предложении catch не выполняется, кажется, что программа бесконечно пытается выполнить «AmazonS3ClientBuilder»
Есть что-то, чего я пропускаю / не понимаю относительно использования Java AWS JDKдля удаленных соединений S3?
Очевидно, что в этом случае файл не будет загружен из указанного сегмента, но я оставил код для метода "getProfileImage" также на тот случай, если кто-то захочетуказать на проблемы с этим также.
Спасибо всем за потраченное время!