从远程目录流式传输数据后重命名文件

时间:2019-05-15 10:12:52

标签: spring-integration spring-integration-dsl spring-integration-sftp

我正在使用以下命令读取文件

.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 :(得分:0)

“有麻烦”是不够的信息;提出此类问题时,您需要提供实际的错误/堆栈跟踪等。

也就是说,请参见the documentation about the advice

  

对于成功的情况,发送到successChannel的消息是AdviceMessage,有效载荷是表达式求值的结果。名为inputMessage的附加属性包含发送给处理程序的原始消息。

因此,您在MV网关中的表达式需要反映这一点(例如payload.inputMessage.headers[...]),或者对于“发件人”名称,您的successExpression需要将有效负载设置为原始文件名。

最后,如果您正在流式传输,那么在使用流式传输之前重命名这里似乎还为时过早。

答案 1 :(得分:0)

I also worked on the kind-off same flow. I hope below code might help you.

.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();
相关问题