Размещение файла в папке S3 bucket - PullRequest
0 голосов
/ 03 октября 2018

есть приложение с весенней загрузкой, где я пытаюсь поместить файл в папку целевого сегмента S3.target-bucket / targetystem-folder / file.csv

Имя папки targetystem будет отличаться для каждого файла, который будет извлечен из файла конфигурации yml.

Папка targetystem должна быть создана с помощьюкод, если папка не закрывается и файл должен быть помещен в папку

. Как я знаю, в корзине S3 нет концепции папки, и все они хранятся в виде объектов.

Прочитал в некоторых документахНапример, чтобы поместить файл в папку, нужно указать ключевое выражение, например, targetystem-folder / file.csv и bucket = target-bucket.Но это не сработает. Хотелось бы добиться этого, используя spring -gration-aws без непосредственного использования aws-sdk

    <int-aws:s3-outbound-channel-adapter id="filesS3Mover"
        channel="filesS3MoverChannel"
        transfer-manager="transferManager"
        bucket="${aws.s3.target.bucket}"
        key-expression="headers.targetsystem-folder/headers.file_name"
        command="UPLOAD">
</int-aws:s3-outbound-channel-adapter>

Может ли кто-нибудь по этому вопросу порекомендовать

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Ваша проблема в том, что SpEL в key-expression неверен.Просто попробуйте начать с обычного Java-кода и представьте, как бы вы хотели создать такое значение.Затем вы поймете, что в вашем выражении отсутствует операция конкатенации:

 key-expression="headers.targetsystem-folder + '/' + headers.file_name"

Также, пожалуйста, в будущем предоставьте больше информации об ошибке.В большинстве случаев трассировка стека полностью полезна.

0 голосов
/ 03 октября 2018

В проекте, над которым я работал раньше, я просто использовал предоставленный java aws sdk.Затем в своей реализации я сделал что-то подобное

private void uploadFileTos3bucket(String fileName, File file) {
    s3client.putObject(new PutObjectRequest("target-bucket", "/targetsystem-folder/"+fileName, file)
            .withCannedAcl(CannedAccessControlList.PublicRead));
}

Я больше не создавал конфигурацию.Он автоматически создает /targetsystem-folder внутри корзины (затем поместите файл в нее), если он не существует, в противном случае поместите файл внутрь.


Вы можете принять этот ответ в качестве ссылки, для дальнейшего объяснения предмета.

На S3 нет "подкаталогов".Есть сегменты и есть ключи внутри блоков.

Вы можете эмулировать традиционные каталоги с помощью поиска по префиксу.Например, вы можете хранить следующие ключи в корзине:

foo/bar1
foo/bar2
foo/bar3
blah/baz1
blah/baz2
...