2012-05-10 87 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

相关问题