将zip文件通过jsch上传到sftp站点时,inputstream是关闭错误

时间:2015-10-29 04:18:10

标签: inputstream sftp jsch

将zip文件上传到SFTP时,我们收到以下错误消息。相同的代码适用于其他应用程序。我们使用jsch-0.1.44.jar进行SFTP连接。

java.io.IOException: inputstream is closed
        at com.jcraft.jsch.ChannelSftp._put(ChannelSftp.java:571)
        at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.java:431)
        at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.java:398)
aused by: java.io.IOException: inputstream is closed
        at com.jcraft.jsch.ChannelSftp.fill(ChannelSftp.java:2326)
        at com.jcraft.jsch.ChannelSftp.header(ChannelSftp.java:2350)
        at com.jcraft.jsch.ChannelSftp.checkStatus(ChannelSftp.java:1923)
        at com.jcraft.jsch.ChannelSftp._put(ChannelSftp.java:559)
        ... 6 more

4 个答案:

答案 0 :(得分:2)

我搜索了stackoverflow和互联网上的许多其他来源以获得答案。 我找到的原因有两个,这不是我特定问题的原因。

1)此异常通常意味着连接突然关闭。我会查看服务器上的日志,看看是否有错误。 2)此错误的根本原因是在代码中,远程路径被打开两次。因此,即使没有实际关闭通道,但是,当尝试第二次打开远程路径时,现有的路径/通道也会关闭或者出现异常,并引发此异常。

在做了一些POC之后,我们对代码所做的任何改变都没有任何影响。其中一个问题是将inputstream对象作为参数传递给一个方法,其中调用了channelftp的实际put方法。

this.channelSftp.put(inputstream,strFileName);

不是从另一个方法传递输入流,而是编写代码以在调用此put的方法内部形成输入流。这没有任何影响。

尝试通过代码将文件上传到sftp网站。抛出相同的错误。

后来我们发现没有代码问题。即使手动上传也失败了。这表明我们需要进一步深入了解此SFTP参与细节,并发现我们使用的FILENAME格式不是SFTP配置的格式。当我们匹配文件名格式时,问题就解决了。

答案 1 :(得分:1)

我最近遇到了类似的问题,在我的情况下,使用JSch登录远程计算机时出现问题。

尝试手动连接到计算机时,我发现密码已过期,并在登录时提示输入新密码。它能够连接和验证,但一旦连接它无法进一步。这解释了为什么它是输入流故障而不是身份验证失败。

我知道这是一个老问题,但是对于在网上搜索相同位置的任何其他人来说,答案可能只是一个简单的解决方案。

答案 2 :(得分:0)

我也有类似的问题。还想补充一点,它与代码无关,但与访问权限有关。我与一个可以通过ssh连接但无法通过stp发送文件的用户建立了连接。更改具有适当访问权限的用户可以解决问题

答案 3 :(得分:0)

Nikola 和我也遇到了这个问题。由于权限或密码或其他原因,这不是问题。 我们正在使用 CachingSessionFactory。会话由服务器或客户端应用程序任意关闭。我们在另一个 StackOverFlow 中描述了我们的解决方案:Sftp File Upload Fails