如何正确使用Spring Integration SFTP Outbound Gateway的mput上传目录文件
解决Spring Integration SFTP出站网关批量上传目录文件问题
问题原因
使用mput命令时,直接将目录对象作为payload传入,默认的expression="payload"无法自动遍历目录下的所有文件,仅会处理目录本身,最终导致仅上传单个文件。
解决方案
1. 修改SFTP出站网关配置
调整expression属性,用通配符匹配目录下的所有文件,同时按需开启递归上传子目录:
<int-sftp:outbound-gateway session-factory="sftpSessionFactory" use-temporary-file-name="false" request-channel="tmpDirToUploadOutputChannel" command="mput" expression="payload.path + '/*'" remote-directory="/out" recursive="true" <!-- 如需递归上传子目录则添加此属性 --> reply-channel="sftpUploadFilesResultChannel"> </int-sftp:outbound-gateway>
关键配置说明
expression="payload.path + '/*'":将传入的目录对象转换为「目录路径+通配符」的形式,让mput命令识别并处理目录下的所有文件。recursive="true":如果需要上传目录下的所有子目录及嵌套文件,添加此属性开启递归处理逻辑。
2. 消息发送代码无需修改
你的Kotlin消息发送逻辑保持原样即可,依然传入目录对象作为payload:
val message = MessageBuilder .withPayload(tmpOutFile) .build()
配置完成后,SFTP出站网关会自动遍历目标目录下的所有文件(含子目录,若开启递归),完成批量上传操作。
内容的提问来源于stack exchange,提问作者Tomek Niemczak
相关产品推荐
相关产品推荐

