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

Spring集成Sftp上传失败,但简单的Jsch上传可以。为什么?

经骁
2023-03-14

我使用Spring集成SFTP将文件上载到SFTP服务器。当我发送一些并发请求或繁重文件时,我收到了套接字克隆异常。但是,当我用简单的Jsch客户端直接发送相同的文件时,即使是并发调用,一切似乎都很好。

我对这两个库都使用默认配置。Spring SFTP使用Jsch,它的配置方式是否会导致错误?Spring是否有比简单Jsch更特殊的配置或操作,但不是在默认配置或行为中?

共有2个答案

丁弘新
2023-03-14

修复问题的Bean配置:

@Bean("speosSessionFactory")
public SessionFactory<ChannelSftp.LsEntry> speosSftpSessionFactory(ApplicationProperties applicationProperties) {
    DefaultSftpSessionFactory factory = new DefaultSftpSessionFactory(false);
    factory.setHost(applicationProperties.getHost());
    factory.setPort(applicationProperties.getPort());
    factory.setUser(applicationProperties.getUser());
    if (applicationProperties.getPrivateKey() != null) {
        factory.setPrivateKey(applicationProperties.getPrivateKey());
        factory.setPrivateKeyPassphrase(applicationProperties.getPrivateKeyPassphrase());
    } else {
        factory.setPassword(applicationProperties.getPassword());
    }
    factory.setAllowUnknownKeys(true);
    return new CachingSessionFactory<>(factory, applicationProperties.getMaxSessions());
}
柯星辰
2023-03-14

问题已经解决。当将isShared会话设置为true时,Spring不会关闭会话,会话保留在池中以避免关闭/重新打开操作。它会导致一些sftp服务器出现一些“Socket Cloked”错误(取决于它们的配置)。当使用每个操作都有专用会话通道的原始jsch客户端时,它的'ok,使用isShared会话=false也可以,所以在某种程度上,isShared会话=false可以被视为等同于每个操作都有打开/关闭的原始jsch操作

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

  • 更新:如果你也有同样的问题,请在这篇文章中找到最多支持的答案。我运行了,发现问题中的项目实际上有两次部署阶段的执行。取消其中一个死刑解决了我的问题。

  • 问题内容: 我对带有cURL的简单文件上传帖子有问题…我做了很多次,但是在这种情况下,我总是从服务器收到“ 417 Expectation Failed”。当我尝试使用浏览器发布信息时,它可以100%正常运行,但不能使用cURL。 那是我的配置: 我简单的测试形式有效: 这是image_upload.php: 我的cURL脚本(image_upload.sh)如下所示: 和服务器头: 我不知道错误

  • 我创建了一个声明性管道 使用maven构建神器 将工件上传到Nexus存储库 使用的插件-Nexus工件上传器插件 Nexus-Sonatype NexusOSS 3.17 但是在这里,当上传神器到nexus repo失败时,管道没有失败,它显示为成功。我查了一下,很多其他人都报告了这个问题。 那么,如果上传失败,我可以在这里添加任何解决方法,使我的管道失败吗? 我已经附上了发布神器阶段和截图 控

  • 我正在尝试使用JSCH将两个文件上载到带有SFTP的服务器上。如果目录是空的,上传文件很好,但我想一遍又一遍地上传同一个文件(只是在里面改变一个id),但我不知道如何做到这一点。JSch中有一些名为OVERWRITE的静态参数,但我无法找到如何使用它。 这是我当前的代码:

  • 我正试图将文件上载到linux服务器,但我收到一个错误,错误是:“”。我不知道我的代码是否错误,或者连接是否被服务器阻止了——使用相同的细节,我可以将服务器与FileZilla连接起来。 我的代码: