2012-05-10 86 views
2

我使用Apache Commons FTPClient 3.1來執行簡單的文件上傳。 storefile()適用於較小尺寸文件(低於100MB)的文件,但當我嘗試上傳大於100MB的文件時,它會完成上傳,但只是掛起。上傳大文件後Commons FTPClient掛起

我已經嘗試進入被動模式像其他人所建議的,但它似乎並沒有解決這個問題。我已經嘗試了多個具有相同結果的FTP服務器,所以我猜測它不是主機。

下面是我在做什麼要點:

ftpClient.connect(...); 
ftpClient.login(...); 
ftpClient.enterLocalPassiveMode(); 
boolean success = ftpClient.storeFile(...); 
if(success) 
... 

程序掛起的大文件第4行,但併成功上傳的文件。

回答

6

https://commons.apache.org/proper/commons-net/apidocs/org/apache/commons/net/ftp/FTPClient.html

它超時。此鏈接可能有所幫助。

控制通道保持活動功能: 在文件傳輸過程中,數據連接繁忙,但控制連接空閒。 FTP服務器知道控制連接正在使用,所以不會通過缺少活動來關閉它,但是網絡路由器很難知道控制和數據連接是相互關聯的。某些路由器可能會將控制連接視爲空閒,並且如果通過數據連接的傳輸花費的時間超過路由器允許的空閒時間,則斷開連接。 對此的一個解決方案是通過控制連接發送安全命令(即NOOP)來重置路由器的空閒計時器。這是啓用如下:

ftpClient.setControlKeepAliveTimeout(300); // set timeout to 5 minutes 

這將導致文件上傳/下載方法大約每5分鐘發送一個NOOP。

+0

謝謝。這是問題所在。 – JPL

相關問題