Spring Boot和AWS S3:创建TransferManager客户端时找不到区域

时间:2018-07-30 22:56:39

标签: java amazon-web-services amazon-s3 awss3transfermanager

我正在使用Spring Boot应用程序中的AWS开发工具包将一批文件上传到S3存储桶。当我将aws客户端提供给TransferManager类时,当尝试用一些文件作为输入命中我的api时,会不断出现此错误

com.amazonaws.SdkClientException: Unable to find a region via the region provider chain. 
Must provide an explicit region in the builder or setup environment to supply a region.

我已经阅读了this个答案和this一个答案,以及许多Google搜索以及这些类的所有AWS文档文件,但找不到问题。我已经仅使用putObject()成功上传了一个文件,但是我需要利用TransferManager类来处理大量文件并优化吞吐量和进度报告。


// AmazonClient.java

private String region = "us-east-2";

private String bucketName = "mybucketname";

private String accessKey = "myaccesskey";

private String secretKey = "mysecretkey";

BasicAWSCredentials credentials = new BasicAWSCredentials(this.accessKey, this.secretKey);

this.s3client = AmazonS3ClientBuilder
                .standard()
                .withCredentials(new AWSStaticCredentialsProvider(credentials))
                .withRegion(Regions.US_EAST_2)
                .build();    

TransferManager transferManager = TransferManagerBuilder.standard().withS3Client(this.s3client).build();
^^^error occurs here

// start upload and store progress
MultipleFileUpload batch = transferManager.uploadFileList(this.bucketName, keyPrefix, directory, fileList);
links.add(batch.getDescription());

我完全按照documentation的要求完成了工作,将客户端交给了TransferManager,以便它可以在内部设置客户端。我曾尝试从AmazonS3ClientBuilder中删除withRegion方法,但在编译时只会引发相同的错误。我尝试使用setRegion,但它与构建器不兼容,并且仅适用于不推荐使用的类。我尝试使用字符串“ us-east-2”,但无济于事。

我已经调试了所有其他内容并设置了断点,我再次检查了密钥是否正确以及存储桶名称和区域。关于TransferManager的事情与设置区域的方式不同,因为我能够上传一个文件而无需使用TransferManager,而是简单地使用

this.s3Client.putObject(new PutObjectRequest(this.bucketName, fileName, newFile)
.withCannedAcl(CannedAccessControList.PublicRead));

成功将1个文件上传到了我的存储桶。现在唯一的区别是,我正在使用文件列表,而传输管理器和AWS文档确实没有帮助。

0 个答案:

没有答案