Java - соединение AWS S3 / файл DL не удалось выполнить с экспортированным JAR - PullRequest
0 голосов
/ 07 апреля 2019

заранее извиняюсь, если это повторение другого вопроса, хотя я потратил целый день на исследования и эксперименты без успеха:

Я пишу приложение для мгновенных сообщений на 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" также на тот случай, если кто-то захочетуказать на проблемы с этим также.

Спасибо всем за потраченное время!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...