Java: Как распечатать содержимое корзины s3 - PullRequest
0 голосов
/ 24 апреля 2020

Я использую 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 таким образом.

Любое понимание того, почему я получаю ошибку "ключ не существует" или возможное разрешение?

1 Ответ

1 голос
/ 25 апреля 2020

Если бы у вас были проблемы с разрешениями, вы бы получили 403 forbidden; не 404 NoSuchKey.

Как называются ваши объекты в корзине? Я предполагаю, что у вас есть некоторые специальные символы или символы в кодировке URL, которые вызывают проблему. Подробнее см. https://aws.amazon.com/premiumsupport/knowledge-center/404-error-nosuchkey-s3/?nc1=h_ls.

И я предлагаю вам использовать listObjectsV2 вместо V1.

...