我试图通过AWSSDKVersion1.x( 1.12.348和1.11.1004)通过配置的GetObject在桶上执行accesspoint操作:
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
<version>1.12.348</version>
</dependency>我有以下代码来执行GetObject操作:
AmazonS3 amazonS3 = AmazonS3ClientBuilder.standard().withRegion(awsRegion).build();
String bucketName= "arn:aws:s3:<bucket-region>:<accountNumber>:accesspoint:<access-point-name>";
String key = "bucket/path/filename.txt";
File to = // a file;
amazonS3.getObject(new GetObjectRequest(bucketName, key), to);根据文档,bucketName可以是:
桶的名称,或访问点ARN,包含所需的对象。
然后..。
在使用通过Amazon的访问点使用此操作时,将提供接入点ARN代替桶名。有关访问点ARN的详细信息,请参阅指南中的“使用访问点”。
https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html
但是,这会引发一个错误:
<Error><Code>InvalidBucketName</Code><Message>The specified bucket is not valid.</Message><BucketName>arn:aws:s3:<bucket-region>:<accountNumber>:accesspoint:<access-point-name></BucketName><RequestId>**********</RequestId><HostId>*******************</HostId></Error>如果出现错误,它似乎不支持ARN格式化的桶名,并且抱怨ARN accesspoint名称中的特殊字符。
PS:在accesspoint值arn:aws:s3:<bucket-region>:<accountNumber>:accesspoint:<access-point-name>中,实际值在<>之间用占位符替换,因此错误将与这些字符无关。这里提供了用于数据保护的占位符。
发布于 2022-11-30 16:43:29
pom.xml还有另一个传递依赖项com.amazonaws:aws-java-sdk-bundle:jar:1.11.375:compile,它来自于以下依赖项:
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-aws</artifactId>
<version>${hadoop.version}</version>
</dependency>aws-java-sdk-bundle重写了原始aws-java-sdk-s3中的大多数类。
与hadoop-aws和aws-java-sdk-s3交换立场解决了这个问题!(在aws-java-sdk-s3之前推送依赖项hadoop-aws)
https://stackoverflow.com/questions/74613615
复制相似问题