Spring-Integeration SFTP网关用于Mput操作

时间:2018-10-23 20:31:25

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

我正在尝试使用SFTP出站网关上传多个文件。我的Java代码如下:

select concat_ws(" ", `first name`, `last name`) as name
from Students 
where GPA > 3.5;

这是XML Config:

final DirectChannel reqWriteChannel = (DirectChannel) context.getBean("toWriteChannel");
final PollableChannel repWriteChannel = (PollableChannel) context.getBean("fromWriteChannel");

reqWriteChannel.send(MessageBuilder.withPayload(listOfFiles).build());
Message<?> input = repReadChannel.receive(1000);

System.out.println(input);
System.out.println(input.getPayload().toString());

当我传递单个文件时,上面的代码有效,但是当我传递文件列表时,出现以下异常:

<int:channel id="fromWriteChannel"><int:queue /></int:channel>
<int:channel id="toWriteChannel" />

<int-sftp:outbound-gateway
      id="sftpWriteOnly"
      session-factory="sftpSessionFactory"
      request-channel="toWriteChannel"
      reply-channel="fromWriteChannel"
      command="mput"
      expression="payload"
      remote-directory="/test/mytest/"
      remote-file-separator="X"
      auto-create-directory="true"
      order="1" mput-regex=".*">
</int-sftp:outbound-gateway>

<int:poller default="true" fixed-delay="500"/>

有什么办法解决此问题并上传多个文件吗?请分享任何完整的示例。谢谢

1 个答案:

答案 0 :(得分:0)

MPUT发送目录中的所有文件;不是File的列表。

来自the documentation ...

  

mput将多个文件发送到服务器并支持以下选项:

     

-R - Recursive-发送目录和子目录中的所有文件(可能已过滤)

     

消息有效负载必须是代表本地目录的java.io.File。

     

...

(我的重点是,它也可以是引用目录的String)。

如果您不想发送所有文件,则可以添加过滤器。

随时打开“改进” JIRA Issue,我们可以添加对File集合的支持。