Список папок на S3 - PullRequest
       1

Список папок на S3

0 голосов
/ 08 сентября 2018

просто пытаюсь разобрать и отобразить целое ведро, я не могу избавиться от сообщения, не содержащего такого ключа, что является странным ..

Код ниже подключается и отображается на стандартный выход:

    import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider
    import software.amazon.awssdk.regions.Region
    import software.amazon.awssdk.services.s3.S3Client
    import software.amazon.awssdk.services.s3.model.EncodingType
    import software.amazon.awssdk.services.s3.model.ListObjectsV2Request
    import software.amazon.awssdk.services.s3.model.ListObjectsV2Response
    import software.amazon.awssdk.services.s3.paginators.ListObjectsV2Iterable
    import java.net.URI

    internal class S3ObjectsOps {

    companion object {

            private val BUCKET: String = "mybucket"
            private val REGION_IRE = software.amazon.awssdk.regions.Region.EU_WEST_1

            val s3c = S3Client.builder()
                    .region(REGION_IRE)
                    .endpointOverride(URI("https://${BUCKET}.s3-eu-west-1.amazonaws.com/"))
                    .credentialsProvider(ProfileCredentialsProvider.builder()
                            .profileName("default")
                            .build())
                    .build()

            fun lsfolders(bucket: String) {
                val listReq = ListObjectsV2Request.builder()
                        .bucket(bucket)
                        .delimiter("/")
                        .prefix("")
                        .maxKeys(10_000)
                        .build()

                val listRes = s3c.listObjectsV2Paginator(listReq)

                listRes.contents().onEach { f ->
                    if (!f.key().isNullOrBlank()) {
                        println(">> ${f.key()}")
                    } else {
                        println(" = ")
                    }
                }

            }

            @JvmStatic
            fun main(args: Array<String>) {
                val bucket: String = ((args.size > 0 && !args[0].isNullOrEmpty()).toString()) ?: BUCKET
                println("s3 ls test for bucket ${bucket}")
                lsfolders(bucket)
            }
        }

    }

Что поднимает:

software.amazon.awssdk.services.s3.model.NoSuchKeyException: указанный ключ не существует. (Сервис: S3Client; Код состояния: 404; Идентификатор запроса: C8AF9CB788D77F74) Исключение в потоке "main" software.amazon.awssdk.services.s3.model.NoSuchKeyException: указанный ключ не существует. (Сервис: S3Client; Код состояния: 404; Идентификатор запроса: C8AF9CB788D77F74) по адресу software.amazon.awssdk.core.http.pipeline.stages.HandleResponseStage.handleErrorResponse (HandleResponseStage.java:114)

То же исключение при использовании потока

   listRes.contents().stream().forEach { content -> println(" Key: " + content.key() + " | ") }

Спасибо, ребята!

1 Ответ

0 голосов
/ 09 сентября 2018

Правильные вызовы ListObjectsV2Request:

val listReq = ListObjectsV2Request.builder()
                .bucket(bucket)
                .delimiter("/")
                .build()

        val listRes = s3c.listObjectsV2Paginator(listReq)
        listRes.contents().stream().forEach { content -> println(" Key: " + content.key() + " | ") }

Затем s3client должен начать с минимальным количеством параметров:

   val s3c = S3Client.builder()
            .credentialsProvider(ProfileCredentialsProvider.builder().profileName("default").build())
            .region(REGION_IRE)
            .build()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...