Я использую jdk 11 и virtual-host-style-access (AWS SDK для Java version 2) для создания / доступа к объектам в AWS s3 bucket следующим образом:
https://docs.aws.amazon.com/sdk-for-java/v2/developer-guide/examples-s3-objects.html#list-object
Хотя я смог создать объекты в указанном контейнере, я не смог распечатать список содержимого / объектов в баке, хотя, поскольку я проверил разрешение, каждому предоставлено право просматривать объекты в ведре. Сообщение об ошибке:
software.amazon.awssdk.services.s3.model.NoSuchKeyException: The specified key does not exist. (Service: S3, Status Code: 404
Это способ создания s3client:
adapterSmsS3Client = S3Client.builder()
.region(Region.US_WEST_2)
.credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create(ACCESS_KEY,SECRET_KEY)))
.endpointOverride(URI.create(BASE_URL))
.build();
И это то, как я пытаюсь распечатайте список:
public static void listBucketObjects( S3Client s3, String bucketName ) {
ListBucketsResponse res1 = s3.listBuckets();
ListObjectsRequest listObjects = ListObjectsRequest
.builder()
.bucket(BUCKET_NAME)
.build();
ListObjectsResponse res = s3.listObjects(listObjects);
List<S3Object> objects = res.contents();
for (ListIterator iterVals = objects.listIterator(); iterVals.hasNext(); ) {
S3Object myValue = (S3Object) iterVals.next();
System.out.print("\n The name of the key is " + myValue.key());
System.out.print("\n The object is " + calKb(myValue.size()) + " KBs");
System.out.print("\n The owner is " + myValue.owner());
}
}
BUCKET_NAME - это имя сегмента на s3 (не любой URL)
Хотя я хотел бы отметить, что если Я использую Path-style-request (AWS SDK для Java версии 1), следующее:
https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/examples-s3-objects.html
Я могу печатать содержимое из того же контейнера. Однако мы не собираемся go таким образом.
Любое понимание того, почему я получаю ошибку "ключ не существует" или возможное разрешение?