将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
答案 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