SFTP-шлюз Spring-Integeration для работы Mput - PullRequest
0 голосов
/ 23 октября 2018

Я пытаюсь загрузить несколько файлов с помощью SFTP Outbound Gateway.Мой Java-код выглядит так:

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());

И это XML Config:

<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"/>

Когда я передаю один файл, приведенный выше код работает, но когда я передаю список файлов,Я получаю следующее исключение:

Caused by: java.lang.IllegalArgumentException: Only File or String payloads allowed for 'mput'
at org.springframework.integration.file.remote.gateway.AbstractRemoteFileOutboundGateway.doMput(AbstractRemoteFileOutboundGateway.java:816)
at org.springframework.integration.file.remote.gateway.AbstractRemoteFileOutboundGateway.handleRequestMessage(AbstractRemoteFileOutboundGateway.java:598)
at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:109)
at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:158)
... 7 more

Есть идеи, как это исправить и загрузить несколько файлов?Пожалуйста, поделитесь любым полным примером.Спасибо

1 Ответ

0 голосов
/ 23 октября 2018

MPUT отправляет все файлы в каталог;не список File.

С документация ...

mput отправляет несколько файлов на сервер и поддерживает следующую опцию:

-R - Recursive - отправить все файлы (возможно, отфильтрованные) в каталоге и подкаталогах

Полезной информацией сообщения должен быть файл java.io.File, представляющий локальный каталог.

...

(мой акцент, это также может быть строка, ссылающаяся на каталог).

Если вы не хотите отправлять все файлы, выможно добавить фильтр.

Не стесняйтесь, чтобы открыть «Улучшение» JIRA Issue , и мы можем добавить поддержку для коллекции File.

...