2015-10-29 227 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登錄到遠程機器時,這是一個問題。

當試圖手動連接到機器時,我發現密碼已過期,並在登錄時提示新密碼。它能夠連接並進行身份驗證,但一旦連接無法繼續進行。這解釋了爲什麼它是輸入流故障而不是認證失敗。

我知道這是一個古老的問題,但對於同一位置的其他人在網上尋找答案,它可能只是一個簡單的解決方案。