从远程目录流式传输数据后重命名文件
Rename the file after streaming the data from remote directory
我正在使用以下命令读取文件
.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();
}
"having trouble" 信息不够;提出此类问题时,您需要提供实际的 error/stack 踪迹等。
也就是说,参见 the documentation about the advice。
For the successful case, the message sent to the successChannel is an AdviceMessage
, with the payload being the result of the expression evaluation. An additional property, called inputMessage
, contains the original message sent to the handler.
因此,您在 MV 网关中的表达式需要反映这一点(例如 payload.inputMessage.headers[...]
),或者对于 "from" 名称,您的 successExpression
需要将有效负载设置为原始文件名。
最后,如果您正在使用流媒体,那么在您使用流媒体之前在这里重命名似乎有点为时过早。
我也在 kind-off 相同的流程上工作。希望下面的代码对您有所帮助。
.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();
我正在使用以下命令读取文件
.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();
}
"having trouble" 信息不够;提出此类问题时,您需要提供实际的 error/stack 踪迹等。
也就是说,参见 the documentation about the advice。
For the successful case, the message sent to the successChannel is an
AdviceMessage
, with the payload being the result of the expression evaluation. An additional property, calledinputMessage
, contains the original message sent to the handler.
因此,您在 MV 网关中的表达式需要反映这一点(例如 payload.inputMessage.headers[...]
),或者对于 "from" 名称,您的 successExpression
需要将有效负载设置为原始文件名。
最后,如果您正在使用流媒体,那么在您使用流媒体之前在这里重命名似乎有点为时过早。
我也在 kind-off 相同的流程上工作。希望下面的代码对您有所帮助。
.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();