Асинхронная загрузка нескольких файлов в корзину AWS S3 - PullRequest
1 голос
/ 01 апреля 2019

Я хочу загрузить несколько файлов в корзину AWS S3 с помощью менеджера переноса из AWS Java SDK (aws-java-sdk-s3-1.11.66.jar), поэтому моя функция здесь:

public static void uploadDirectory(String virtualDirectoryKeyPrefix, File directory) {
    try {
        MultipleFileUpload multipleFileUpload = instance.transferManager.uploadFileList(
                instance.bucketName,
                virtualDirectoryKeyPrefix,
                directory,
                Arrays.asList(Objects.requireNonNull(directory.listFiles())));

        multipleFileUpload.waitForCompletion();
    } catch (InterruptedException e) {
        Logger.error("Not able to write to s3 bucket : " + virtualDirectoryKeyPrefix, e);
    }
}
* 1003Проблема в том, что он работает только тогда, когда я вызываю метод waitForCompletion, и это делает мою функцию синхронной, потому что в этом случае я жду до завершения операции.Я ожидал, что он должен работать без вызова waitForCompletion, но это не так, можете ли вы мне помочь?Спасибо.

1 Ответ

0 голосов
/ 01 апреля 2019

waitForCompletion блокирует только до завершения передачи (https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/transfer/Transfer.html#waitForCompletion--).

Я подозреваю, что ваш перевод работал и раньше, но поскольку он асинхронный, вы не проверяли, когда это было сделано. Для получения асинхронных обновлений добавьте ProgressListener, как описано здесь: https://docs.aws.amazon.com/AmazonS3/latest/dev/HLTrackProgressMPUJava.html

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