SFTP-шлюз Spring-Integeration для работы Mput

Я пытаюсь загрузить несколько файлов с помощью 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 ответ

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

Из документации...

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

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

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

...

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

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

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

Другие вопросы по тегам