我正在使用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文档确实没有帮助。