【问题标题】:Commons FTPClient hangs after uploading large a file上传大文件后,Commons FTPClient 挂起
【发布时间】:2012-05-18 19:17:12
【问题描述】:

我正在使用 Apache Commons FTPClient 3.1 进行简单的文件上传。 storefile() 适用于较小的文件(小于 100MB),但是当我尝试上传大于 100MB 的文件时,它会完成上传但只是挂起。

我已经尝试过像其他人建议的那样进入被动模式,但似乎无法解决问题。我已经尝试了多个 FTP 服务器,结果相同,所以我猜它不是主机。

这是我正在做的事情的要点:

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

对于大文件,程序在第 4 行挂起,但确实成功上传文件。

【问题讨论】:

    标签: java apache upload apache-commons ftp-client


    【解决方案1】:

    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。

    【讨论】:

    • 谢谢。这就是问题所在。
    猜你喜欢
    • 2012-03-31
    • 2016-01-25
    • 2014-06-18
    • 2011-08-30
    • 2012-07-19
    • 2011-08-21
    • 2014-02-13
    • 2013-06-11
    • 1970-01-01
    相关资源
    最近更新 更多