Как дождаться окончания основного потока загрузки файла AWS S3 - PullRequest
0 голосов
/ 16 октября 2019

Исходя из некоторых пользовательских данных, я хочу загрузить несколько изображений (около 10-15) в корзины AWS S3. После завершения интерфейс должен отобразить загруженные изображения на клиент.

Но, согласно моей текущей реализации, перед загрузкой изображений в корзину S3 страница интерфейса получает ответ от серверной части.

Я использую приведенную ниже часть кода для загрузки файлов на S3.

      AmazonS3 s3Client = AmazonS3ClientBuilder.defaultClient();

      ObjectMetadata putObjectMetaData = new ObjectMetadata();
      putObjectMetaData.setContentType(contentType);

      PutObjectRequest putObject =
          new PutObjectRequest(s3BucketPath, fileName, fileStream, new ObjectMetadata())
              .withCannedAcl(CannedAccessControlList.PublicRead);
      putObject.setMetadata(putObjectMetaData);

      PutObjectResult result = s3Client.putObject(putObject);

Как я понял, загрузка S3 происходит в отдельном потоке. Есть ли способ сделать загрузку S3 из того же основного потока. Или есть какой-то другой способ дождаться окончания загрузки S3?

Я очень ценю ваши ответы.

1 Ответ

0 голосов
/ 16 октября 2019

Вы можете попробовать менеджер переноса [1]. Полный пример здесь [2].


import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.s3.transfer.MultipleFileUpload;
import com.amazonaws.services.s3.transfer.TransferManager;
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;
import com.amazonaws.services.s3.transfer.Upload;

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;

-----------------------------------

File f = new File(file_path);
TransferManager xfer_mgr = TransferManagerBuilder.standard().build();
try {
    Upload xfer = xfer_mgr.upload(bucket_name, key_name, f);
    // loop with Transfer.isDone()
    XferMgrProgress.showTransferProgress(xfer);
    //  or block with Transfer.waitForCompletion()
    XferMgrProgress.waitForCompletion(xfer);
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
}
xfer_mgr.shutdownNow();

[1] https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/examples-s3-transfermanager.html [2] https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/XferMgrUpload.java

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