将 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
我搜索了 stackoverflow 和互联网上的许多其他资源来得到答案。
我发现有两个原因不是我的具体问题的原因。
1)此异常通常意味着连接突然关闭。我会查看服务器上的日志以查看是否有错误。
2)这个错误的根本原因是在代码中,远程路径被打开了两次。因此,即使实际上没有关闭通道,但是,当第二次尝试打开远程路径时,现有路径/通道也会关闭或发生其他情况,并且会引发此异常。
进行一些 POC 后,我们对代码所做的任何更改都没有任何影响。我们所研究的一件事是将 inputstream 对象作为参数传递给实际调用channelsftp 的 put 方法的方法。
this.channelSftp.put(inputstream, strFileName );
不是从另一个方法传递输入流,而是编写代码以在调用此 put 的方法内部形成输入流。这没有任何影响。
尝试通过代码将文件上传到 sftp 站点。抛出同样的错误。
后来发现代码没有问题。即使手动上传也失败。这表明我们进一步挖掘此 SFTP 参与详细信息,发现我们使用的 FILENAME 格式不是 SFTP 配置的格式。当我们匹配文件名格式时,问题就解决了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)