2015-10-29 226 views
-1

上传zip文件到SFTP时,我们得到下面的错误。相同的代码适用于其他应用程序。我们使用jsch-0.1.44.jar进行SFTP连接。当通过jsch上传zip文件到sftp站点时inputstream被关闭错误

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 

回答

1

我搜索了stackoverflow和许多其他来源在互联网上得到答案。 我发现有两个原因,这不是我的具体问题的原因。

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

在做了一些POC之后,无论我们对代码做出什么改变都没有任何影响。被查看的一件事是将inputstream对象作为参数传递给实际上将调用channelsftp的方法的方法。

this.channelSftp.put(inputstream,strFileName);

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

尝试通过代码上传文件到sftp站点。同样的错误正在抛出。

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

0

我最近遇到类似这样的问题,在我使用JSch登录到远程机器时,这是一个问题。

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

我知道这是一个古老的问题,但对于同一位置的其他人在网上寻找答案,它可能只是一个简单的解决方案。