我正在尝试移动或重命名远程文件,而不是删除远程文件下载后,我发现这可以通过出站网关移动命令,但无法找到适当的方法来做到这一点。
下载后请帮助重命名文件。
@Bean
@Order(Ordered.HIGHEST_PRECEDENCE)
public SessionFactory<LsEntry> sftpSessionFactory(
final DataloadServiceProperties DataloadServiceProperties) {
DefaultSftpSessionFactory factory = new DefaultSftpSessionFactory(true);
factory.setHost(DataloadServiceProperties.getSftpHost());
factory.setPort(DataloadServiceProperties.getSftpPort());
factory.setUser(DataloadServiceProperties.getSftpUser());
if (DataloadServiceProperties.getSftpPrivateKey() != null) {
factory.setPrivateKey(DataloadServiceProperties.getSftpPrivateKey());
factory.setPrivateKeyPassphrase(
DataloadServiceProperties.getSftpPrivateKeyPassphrase());
}
else {
factory.setPassword(DataloadServiceProperties.getSftpPasword());
}
factory.setAllowUnknownKeys(true);
return new CachingSessionFactory<LsEntry>(factory);
}
@Bean
@Order(Ordered.HIGHEST_PRECEDENCE - 1)
public SftpInboundFileSynchronizer sftpInboundFileSynchronizer(
final SessionFactory<LsEntry> sftpSessionFactory,
final DataloadServiceProperties DataloadServiceProperties) {
SftpInboundFileSynchronizer fileSynchronizer =
new SftpInboundFileSynchronizer(sftpSessionFactory);
fileSynchronizer.setDeleteRemoteFiles(false);
fileSynchronizer.setRemoteDirectory(
DataloadServiceProperties.getSftpRemoteDirectoryDownload());
fileSynchronizer.setFilter(new SftpSimplePatternFileListFilter(
DataloadServiceProperties.getSftpRemoteDirectoryDownloadFilter()));
return fileSynchronizer;
}
@Bean
@Order(Ordered.HIGHEST_PRECEDENCE - 2)
@InboundChannelAdapter(
channel = "fromSftpChannel",
poller = @Poller(
cron = "${sftp.poller.cron}"))
public MessageSource<File> sftpMessageSource(
final SftpInboundFileSynchronizer sftpInboundFileSynchronizer,
final DataloadServiceProperties DataloadServiceProperties) {
SftpInboundFileSynchronizingMessageSource source =
new SftpInboundFileSynchronizingMessageSource(sftpInboundFileSynchronizer);
source.setLocalDirectory(
new File(DataloadServiceProperties.getSftpLocalDirectoryDownload()));
source.setAutoCreateLocalDirectory(true);
source.setLocalFilter(new AcceptOnceFileListFilter<File>());
return source;
}
@Bean
@Inject
@ServiceActivator(
inputChannel = "fromSftpChannel")
public MessageHandler resultFileHandler() {
return new MessageHandler() {
@Override
public void handleMessage(final Message<?> message) throws MessagingException {
String payload = String.valueOf(message.getPayload());
if (!StringUtils.isEmpty(payload) && payload.endsWith("gz")) {
LOGGER.info("toRequest : {}", message.getPayload());
}
}
};
}
private static final SpelExpressionParser PARSER = new SpelExpressionParser();
@Bean(name="fromSftpChannel")
public MessageChannel fromSftpChannel() {
return new PublishSubscribeChannel();
}
@Bean
@Inject
@ServiceActivator(inputChannel = "fromSftpChannel")
@Order(Ordered.LOWEST_PRECEDENCE)
public MessageHandler moveFile() {
SftpOutboundGateway sftpOutboundGateway = new SftpOutboundGateway(sftpSessionFactory(), Command.MV.getCommand(), "'/test/'.concat(" + PARSER.parseExpression("payload.getName()").getExpressionString() + ")");
sftpOutboundGateway.setRenameExpressionString("'/test/uat/'.concat(" + PARSER.parseExpression("payload.getName()").getExpressionString() + ")");
sftpOutboundGateway.setRequiresReply(false);
sftpOutboundGateway.setOutputChannelName("nullChannel");
sftpOutboundGateway.setOrder(Ordered.LOWEST_PRECEDENCE);
sftpOutboundGateway.setAsync(true);
return sftpOutboundGateway;
}
您需要将FromsFTPChannel
设置为PublissSubscribeChannel
,并使用SFTPoutBoundGateway
创建第二个订阅服务器。您真正为command.mv
配置的就是它!不要忘记配置setRenameExpression()
来指定移动的远程路径!
我需要在Sftp服务器中复制/复制远程文件,复制时也要重命名,我在这里读到在Sftp中复制远程文件是不受支持的,所以唯一可用的选项是将文件放入本地,然后再放入Sftp&删除本地文件,我已经成功地实现了我的目标,但问题是有一个日志打印从我不知道它从哪里来。 这是原木。 更令人惊讶的是,它出现的很早,甚至在流执行之前,尽管我已经处理了文件删除最后。我怎样才能摆脱这条日志消息?虽然它不会影响我的进程,但
我想把文件从远程服务器拉到我的本地服务器。我正在使用Spring Integration SFTP来拉文件。我有以下配置: 我不想在成功拉取后从remotedir中删除文件。这里发生的事情是每30秒,从remotedir的文件就会被拉到我的本地文件。我希望spring batch程序在第一次之后停止,不要再次拉出相同的文件。我怎样才能做到这一点?
我有spring批处理设置(远程分区),它从文件中读取项目并处理它们。 null 我指的是这个测试用例 https://github.com/spring-projects/spring-integration/blob/master/spring-integration-sftp/src/test/Java/org/springframework/integration/sftp/outboun
问题内容: 我一直在尝试使用以下方法将远程服务器中的一些选定文件(在执行几次检查后)复制到同一台远程服务器中: 我什至尝试使用该方法将那些选定的文件复制到本地计算机。 有人可以帮忙吗? 问题答案: 核心SFTP协议不支持复制远程文件。 该协议有扩展草案,但只有少数SFTP服务器(例如ProFTPD / mod_sftp 和Bitvise SFTP服务器)支持该协议。 JSch库也不支持该扩展。 备
我需要在SI中构建一个应用程序,它读取一个输入目录,该目录可能包含1000个文件,并将它们复制到远程服务器,例如10个服务器,处理器实例将在其中接收它们进行处理。文件的移动应该是循环方式,以便在处理它们时不会给任何服务器带来额外的负担。再详细一点——假设我们在输入目录中有10个文件,那么应用程序应该在服务器1上复制文件1,在服务器2上复制文件2......服务器10上的文件10。 顺序并不重要,重
我有一个test.sh文件,我想把这个文件从本地计算机复制到远程服务器。我怎么能做到这一点?我尝试使用,但它不起作用。也许我做错了什么。