当前位置: 首页 > 知识库问答 >
问题:

spring集成sftp的探讨

严柏
2023-03-14

我使用Spring Integrationsftp下载和上传文件。

Spring Integration通过提供三个客户端endpoint支持通过SFTP发送和接收文件:入站通道适配器、出站通道适配器和出站网关

当我要下载文件时,我必须分配本地目录,当我要上传文件时,我必须分配远程目录,但如果我不能在编写代码时分配目录,如我的目录与日期相关联,我如何在运行时分配目录?

下面是我的代码:

@Bean
public SessionFactory<LsEntry> sftpSessionFactory(){
    DefaultSftpSessionFactory defaultSftpSessionFactory = new DefaultSftpSessionFactory();
    defaultSftpSessionFactory.setHost(host);
    defaultSftpSessionFactory.setPort(Integer.parseInt(port));
    defaultSftpSessionFactory.setUser(username);
    defaultSftpSessionFactory.setPassword(password);
    defaultSftpSessionFactory.setAllowUnknownKeys(true);
    return new CachingSessionFactory<LsEntry>(defaultSftpSessionFactory);
}

@Bean
public SftpRemoteFileTemplate sftpRemoteFileTemplate(){
    SftpRemoteFileTemplate sftpRemoteFileTemplate = new SftpRemoteFileTemplate(sftpSessionFactory());
    return sftpRemoteFileTemplate;
}

@Bean
@ServiceActivator(inputChannel = "sftpChannel")
public MessageHandler handlerGet() {
    SftpOutboundGateway sftpOutboundGateway = new SftpOutboundGateway(sftpSessionFactory(), "mget", "payload");
    sftpOutboundGateway.setLocalDirectory(new File(localDirectory));
    sftpOutboundGateway.setFilter(new SftpSimplePatternFileListFilter("*.txt"));
    sftpOutboundGateway.setSendTimeout(1000);
    return sftpOutboundGateway;
}

在messageHandler中,我必须在OutboundGateway中分配localDirectory。当我想按天更改我的localDirectory时,我必须将文件下载到localDirectory并移动到目标目录。如何在运行时分配localDirectory?比如今天下载到20170606/明天下载到20170607?

这是我的选择和测试

public interface OutboundGatewayOption {
    @Gateway(requestChannel = "sftpChannel")
    public List<File> getFiles(String dir);
}

@Test
public void test2(){
    outboundGatewayOption.getFiles("upload/20160920/");
}

共有1个答案

应嘉容
2023-03-14
sftpOutboundGateway.setLocalDirectoryExpression(
    new SpelExpressionParser().parseExpression("headers['whereToPutTheFiles']");

ParseExpression(“@somebean.getDirectoryName(有效载荷)”)

等等。

表达式的计算结果必须是表示目录绝对路径的字符串。

 类似资料:
  • 我正在使用Spring集成文件/sftp模块,如何避免下载部分文件?我无法控制将文件推送到ftp/sftp的外部进程。

  • 我正在构建一个小微服务来访问来自SFTP文件服务器的文件。我决定使用Spring Integration SFTP完成这项工作。我对Spring Integration很陌生,对它的工作原理很困惑。 我的目标是在SFTP服务器上获得一个目录中的文件列表,并将它们呈现给用户界面。从那里,用户将选择一个文件进行下载,我将使用文件名将文件从SFTP服务器流式传输到用户界面。 其次,我是否需要两个接口才能

  • 我有一个用例,用户将多个csv文件放到远程目录中,然后放置ready.txt来指示文件已准备好使用。当我们的applcation在远程目录中看到ready.txt文件时,它应该开始使用sftp文件入站通道适配器将所有文件复制到本地目录,包括ready.txt。是否有办法确保readt.txt文件是最后一个要复制到本地目录的文件? 因为当文件从远程目录复制到本地目录时,我有另一个文件入站通道适配器在

  • 我在springboot项目1.5.10版中工作。释放 我正在为sftp使用Spring集成。以下gradle依赖项对我来说一切都很好 我还将普罗米修斯整合到模块中。 我已经完成了普罗米修斯的所有其他要求。但是我没有得到普罗米修斯的指标。 项目中的所有其他服务都在使用prometheus,但没有使用spring integration sftp,prometheus正在为所有这些服务工作。 我尝试

  • 我需要将不同的文件sftp到服务器上。 在传递范围内的文件位于Windows服务器中。 为此,我考虑使用Spring集成适配器,因为我不仅需要交付文件,而且还需要为每个文件交付将元数据信息写入数据库。 您知道如何使用Spring集成将Windows文件共享上的多个文件sftp到其他服务器吗?

  • 如何确保文件是否成功上传到SFTP服务器。我想确保SFTP上传成功,然后我只想应用其他逻辑。这是我要上传的代码。 我看到日志看起来不错。已验证文件正在上传到SFTP服务器。但不知何故,我无法确保文件正在上传到服务器上。请告知如何添加代码以确保文件上传成功。

  • 我使用Spring Integration的SFTP和出站通道适配器将文件上传到远程位置。当它将文件发送到一个SFTP位置时,它可以正常工作。然而,在我的代码中,我试图基于不同的标准发送到多个SFTP位置。 以下是我的设置-从Spring集成文件以下 我的问题是: 有人知道如何配置多个SFTP会话吗 谢谢

  • 我有几个hickup设置私钥为Spring集成SFTP。 我想我可以在这里分享我的发现。 我在别处读到,我应该用私钥参数化JSch对象。然而,这并不奏效: 结果异常: