Как читать файлы JSON из S3 с помощью S3AsyncClient - PullRequest
0 голосов
/ 15 января 2019

Я не могу понять, как прочитать файл JSON из S3 в память как String.

В примерах я нахожу звонки getObjectContent(), однако это не доступно для GetObjectResponse, полученного от S3AsyncClient.

Код, который я экспериментирую, является примером кода от AWS.

// Creates a default async client with credentials and AWS Region loaded from the
// environment
S3AsyncClient client = S3AsyncClient.create();

// Start the call to Amazon S3, not blocking to wait for the result
CompletableFuture<GetObjectResponse> responseFuture =
        client.getObject(GetObjectRequest.builder()
                                         .bucket("my-bucket")
                                         .key("my-object-key")
                                         .build(),
                         AsyncResponseTransformer.toFile(Paths.get("my-file.out")));

// When future is complete (either successfully or in error), handle the response
CompletableFuture<GetObjectResponse> operationCompleteFuture =
        responseFuture.whenComplete((getObjectResponse, exception) -> {
            if (getObjectResponse != null) {
                // At this point, the file my-file.out has been created with the data
                // from S3; let's just print the object version
                System.out.println(getObjectResponse.versionId());
            } else {
                // Handle the error
                exception.printStackTrace();
            }
        });

// We could do other work while waiting for the AWS call to complete in
// the background, but we'll just wait for "whenComplete" to finish instead
operationCompleteFuture.join();

Как изменить этот код, чтобы я мог получить фактическое содержимое JSON из GetObjectResponse?

Ответы [ 2 ]

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

После преобразования ответа в байты его можно преобразовать в строку:

S3AsyncClient client = S3AsyncClient.create();

GetObjectRequest getObjectRequest = GetObjectRequest.builder().bucket("my-bucket").key("my-object-key").build();

client.getObject(getObjectRequest, AsyncResponseTransformer.toBytes())
      .thenApply(ResponseBytes::asUtf8String)
      .whenComplete((stringContent, exception) -> {
          if (stringContent != null)
              System.out.println(stringContent);
          else
              exception.printStackTrace();
      });
0 голосов
/ 15 января 2019

Вы можете использовать AsyncResponseTransformer.toBytes, чтобы сохранить ответ в байтовом массиве, а не в файле. Javadoc

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