如何将S3object转换为Observable

时间:2018-05-31 09:16:24

标签: java amazon-web-services amazon-s3 rx-java vert.x

我正在尝试使用 RxJava Vert.x 框架实现一个方法。

该方法的返回类型为Observable<String>,但是当从方法bogy中的S3存储桶中获取一些数据时,它会返回S3Object

现在,我必须将S3Object转换为Observable<string>。 (我在S3存储桶中存储 JSON ,如abc.json)。

 public Observable<String> getCustomerFroms3(String orderId) {

    AWSCredentials credentials = new BasicAWSCredentials (
           "*************MIIVCCCA",
            "az4aBUp58x&&&&&&&&&&&&&&&&&&&3gUTw"
    );
    AmazonS3 s3client = AmazonS3ClientBuilder
            .standard()
            .withCredentials(new AWSStaticCredentialsProvider (credentials))
            .withRegion(Regions.AP_SOUTH_1)
            .build();

    String bucketName = "database8";
    S3Object s3Object = s3client.getObject(bucketName,orderId);
    System.out.println(s3Object);

}

如何将S3Object转换为Observable

1 个答案:

答案 0 :(得分:1)

一种简单的方法是使用Observable工厂方法从S3Object内容中创建简单实例:

public Observable<String> getCustomerFroms3(String orderId) {
    return Observable.create(
          s -> {
              try {
                  AWSCredentials credentials = new BasicAWSCredentials (
                        "*************MIIVCCCA",
                        "az4aBUp58x&&&&&&&&&&&&&&&&&&&3gUTw"
                  );
                  AmazonS3 s3client = AmazonS3ClientBuilder
                        .standard()
                        .withCredentials(new AWSStaticCredentialsProvider (credentials))
                        .withRegion(Regions.AP_SOUTH_1)
                        .build();

                  S3Object s3Object = s3client.getObject("database8", orderId);
                  s.onNext(IOUtils.toString(s3Object.getObjectContent()));
                  s.onComplete();
              } catch (Exception e) {
                  s.onError(e);
              }
          }
    );
}

请注意,这只是为了演示创建Observable实例的方法,不应被视为最佳选择。