最近项目使用到了ftp下载功能,采用的Apache Commons Net API。使用api很快就能完成,由于之前封装util工具的同事应该不是很熟悉API的使用场景,在实际环境中遇到了一些坑。
A)主动被动模式选择:FTP主动模式和被动模式的详细介绍可以参考(详细介绍)。大概意思就是主动模式是客户端向服务端发送PORT命令,然后服务端通过20数据端口连接客户端开启的端口,然后发送数据;被动模式是客户端向服务端发送PASV命令,服务端随机开启一个端口并通知客户端,客户端根据该端口与服务端建立连接,然后发送数据。服务端是两种模式的,使用哪种模式取决于客户端,同时关键点在于网络环境适合用哪种模式,比如客户端在防火墙内,则最好选择被动模式。ftpClient.enterLocalActiveMode()便是配置成主动模式,而ftpClient.enterLocalPassiveMode()则配置成被动模式。
B)文件格式选择:默认是类型是ASCII(普通文本文件),但是为了使得支持任何类型,建议设置成BINARY_FILE_TYPE,并且是在上传和下载操作开始前调用setFileType(int fileType)。
C)上传、下载重载方法的使用选择:比如上传,boolean storeFile(String remote, InputStream local)和OutputStream storeFileStream(String remote),差别是第一个方法如果我们不用关心到底已经从InputStream中传递了多少字节,完全依靠接口内部实现完成输入输出操作,而第二个方法使得我们可以在上传过程中控制传送字节速度等额外操作,比如传送进度的实现便可以依赖此方法。但是,需要注意的是