Переименуйте файл после потоковой передачи данных из удаленного каталога - PullRequest
2 голосов
/ 15 мая 2019

Я читаю файл, используя приведенную ниже команду

.handle(Sftp.outboundGateway(sftpSessionFactory(), GET,"payload.remoteDirectory + payload.filename").options(STREAM))

Как только данные передаются в потоковом режиме, у меня есть совет для обработки успеха и неудачи.Я хочу переименовать файл в случае успеха, У меня возникла проблема при переименовании удаленного файла .Я хочу переименовать файл и выполнить обработку ошибок после этого, используя аналогичные советы.

.handle(service(), e -> e.advice(after()))

 @Bean
    public ExpressionEvaluatingRequestHandlerAdvice after() {
        ExpressionEvaluatingRequestHandlerAdvice advice = new ExpressionEvaluatingRequestHandlerAdvice();
        advice.setSuccessChannelName("success.input");
        advice.setOnSuccessExpressionString("payload + ' was successful'");
        advice.setFailureChannelName("failure.input");
        advice.setOnFailureExpressionString("payload + ' was bad, with reason: ' + #exception.cause.message");
        advice.setTrapException(true);
        return advice;
    }



@Bean
    public IntegrationFlow success() {
        return f -> f.handle(Sftp.outboundGateway(sftpSessionFactory(), MV, "payload").renameExpression("headers[file_renameTo]='gileName_read'")).log();
    }

Ответы [ 2 ]

0 голосов
/ 19 мая 2019

Я также работал над тем же потоком. Я надеюсь, что приведенный ниже код может вам помочь.

.handle(service(), e -> e.advice(after()))
                .enrichHeaders(h -> h
                        .headerExpression(FileHeaders.RENAME_TO, "headers[file_remoteDirectory]+'archive/' + headers[file_remoteFile]")
                        .headerExpression(FileHeaders.REMOTE_FILE, "headers[file_remoteFile]")
                        .header(FileHeaders.REMOTE_DIRECTORY, "headers[file_remoteDirectory]"))
                .handle(Sftp.outboundGateway(sftpSessionFactory(), MV, "headers[file_remoteDirectory]+headers[file_remoteFile]").renameExpression("headers['file_renameTo']"))
                .get();
0 голосов
/ 15 мая 2019

"возникли проблемы" - недостаточно информации; при задании таких вопросов вы должны указать фактическую ошибку / трассировку стека и т. д.

Тем не менее, см. документацию о совете .

Для успешного случая сообщение, отправленное в successChannel, представляет собой AdviceMessage, а полезная нагрузка является результатом оценки выражения. Дополнительное свойство, называемое inputMessage, содержит исходное сообщение, отправленное обработчику.

Итак, ваши выражения в шлюзе MV должны отражать это (например, payload.inputMessage.headers[...]) или, для имени "from", ваш successExpression должен установить полезную нагрузку в исходное имя файла.

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

...