sftp:出站网关移动文件不能正常工作

问题描述:

我是弹簧整合的新手。我请求帮助解决这个问题。sftp:出站网关移动文件不能正常工作

我正在使用sftp:outbound-gateway将文件从一个文件夹移动到另一个文件夹。

文件夹结构:

top-dir 
- module-dir 
    - output-dir 
     filexyz.txt 
    - archive-dir 

我想filexyz.txt移动从输出到存档文件夹。

配置为:

<int-sftp:outbound-gateway 
session-factory="ftpSessionFactory" 
expression="payload.remoteDirectory + '/' + payload.filename" 
request-channel="inChannel" 
command="mv" 
rename-expression="payload.remoteDirectory + '/' +  
payload.filename.replaceFirst('output-dir','archive-dir')" 
reply-channel="outChannel"/> 

java代码:

DirectChannel moveChannel = context.getBean("inChannel",DirectChannel.class); 
moveChannel.send(new GenericMessage<File>(new File("top-dir\module-dir\output-dir\filexyz.txt"))); 

我提到的问题在how to replace string in SpEL expression?但没能解决我的问题。

我得到表达式评估失败:payload.remoteDirectory +'/'+ payload.filename异常。

我想我在java代码中做错了什么。

请帮帮我。

expression="payload.remoteDirectory + '/' + payload.filename"

你的有效载荷是一个简单的java.io.File;它没有这些属性。

您需要使用绝对路径;像

expression="payload.absolutePath

rename-expression="payload.absolutePath.replace....

如果您在Windows上运行,你也可能需要更换\/了。

要使用您现有的表达式,您需要一个自定义有效载荷,而不是File,其中remoteDirectoryfilename属性。

+0

非常感谢Gary。我可以用自定义有效载荷解决问题。 – mahajpan