如何解决'使用构建器创建客户端是不可变的'?

Vya*_*pal 3 java amazon-s3 amazon-web-services

我正在创建一个想要将文件上传到S3存储桶的应用程序.我从以下代码段收到错误:

BasicAWSCredentials awsCreds = new BasicAWSCredentials("<myKey>", "<mySecretId>");
                                AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                                        .withRegion("<myRegion>")
                                        .withCredentials(new AWSStaticCredentialsProvider(awsCreds))
                                        .build();

                                PutObjectRequest request = new PutObjectRequest("testbucketupdate", "testFile", new File("D:\\Attachments\\LICENSE"));
                                ObjectMetadata metadata = new ObjectMetadata();
                                metadata.setContentType("plain/text");
                                metadata.addUserMetadata("x-amz-meta-title", "someTitle");
                                request.setMetadata(metadata);
                                s3Client.setS3ClientOptions(S3ClientOptions.builder().setPathStyleAccess(true).disableChunkedEncoding().build());
                                s3Client.putObject(request);
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Java.lang.UnsupportedOperationException: Client is immutable when created with the builder.
    at com.amazonaws.AmazonWebServiceClient.checkMutability(AmazonWebServiceClient.java:937)
    at com.amazonaws.services.s3.AmazonS3Client.setS3ClientOptions(AmazonS3Client.java:716)
    at com.amazonaws.lambda.demo.LambdaFunctionHandler.check(LambdaFunctionHandler.java:123)
    at com.amazonaws.lambda.demo.LambdaFunctionHandler.main(LambdaFunctionHandler.java:208)
    at com.amazonaws.lambda.demo.LambdaFunctionHandler.handleRequest(LambdaFunctionHandler.java:51)
    at com.amazonaws.lambda.demo.LambdaFunctionHandler.handleRequest(LambdaFunctionHandler.java:1)
    at lambdainternal.EventHandlerLoader$PojoHandlerAsStreamHandler.handleRequest(EventHandlerLoader.java:178)
    at lambdainternal.EventHandlerLoader$2.call(EventHandlerLoader.java:888)
    at lambdainternal.AWSLambda.startRuntime(AWSLambda.java:283)
    at lambdainternal.AWSLambda.<clinit>(AWSLambda.java:64)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at lambdainternal.LambdaRTEntry.main(LambdaRTEntry.java:94)
Run Code Online (Sandbox Code Playgroud)

将文件成功上传到所需存储桶应该做哪些更改?

lex*_*ore 7

显然错误说如果你使用AmazonS3ClientBuilder构建客户端,它将是不可变的,你不能在它构建后修改它.

解决方案是稍后删除s3Client.setS3ClientOptions(...)并使用AmazonS3ClientBuilder构建器设置所需的选项.一些事情:

AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
    .withRegion("<myRegion>")
    .withCredentials(new AWSStaticCredentialsProvider(awsCreds))
    .enablePathStyleAccess()
    .disableChunkedEncoding()
    .build();
Run Code Online (Sandbox Code Playgroud)