apache 的 org.apache.commons.net.ftp 中的 FTPClient 在 使用时 需要注意 FTPClient 有两种上传文件的模式。
主动模式(默认,new FTPClient().enterLocalActiveMode() )
ftp客户端通过 21 端口连接服务器成功后。
在后续的文件读写中,客户端和服务端会新建一个数据传输的连接,客户随机开放一个端口1024~5000,并且发送PORT命令给服务器,告诉服务器 我要使用这个端口来建立连接传输数据
被动模式(new FTPClient().enterLocalPassiveMode() )
ftp客户端通过 21 端口连接服务器成功后。
在后续的文件读写中, 客户端和服务端会新建一个数据传输的连接,客户端通过20端口发送PASV命令给服务器的时候,服务端会随机开放一个端口(1024~5000),并且通知客户端通过这个端口传输数据。
遇到问题:
在上传文件的时候,我就遇到了:
客户端连接ftp成功,在ftp上创建文件夹正常,上传文件却一直卡主,也没有任何报错信息。
在测试环境测试是正常的。 FTPClient 默认是主动模式,由客户端选择端口(1024~5000),而我们的服务器为了安全对外开放3000以上的端口,需要开通权限。
解决:
后面将FTPClient设置成 被动模式,可以创建文件成功。