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
,