FtpClient.storeFile()函数总是返回false

今天我在使用FTP上传图片到服务器时,使用函数FtpClient.storeFile(filename,inputFile)函数上传。我发现返回值总是false,但是明明图片已经上传成功。

FtpClient.storeFile()函数总是返回false_第1张图片

后来查阅资料在这之前加上一句话就好了:

                 ftp.enterLocalPassiveMode();


原因说明:FtpClient.enterLocalPassiveMode();这个方法是每次数据连接之前,ftp client告诉 ftp server开通一个端口来传输数据。这样做主要是因为ftp server可能每次开启不同的端口来传输数据,但是在linux或者其他的服务器上传,我们知道service返回给client信息是通过20号端口,如果通过其他端口传输数据的话,通过20号端口就接收不到数据。所以会返回false


最后再说一下FTP的连接方式:

主动 FTP :   命令连接:客户端 >1024 端口 -> 服务器 21 端口   数据连接:客户端 >1024 端口 <- 服务器 20 端口   

被动 FTP :   命令连接:客户端 >1024 端口 -> 服务器 21 端口   数据连接:客户端 >1024 端口 -> 服务器 >1024 端口 

FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。     

PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时, 客户端在命令链路上用PORT命令告诉服务器:“我打开了***X端口,你过来连接我”。于是服务器从20端口向客户端的***X端口发送连接请求,建立 一条数据链路来传送数据。       

PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时, 服务器在命令链路上用PASV命令告诉客户端:“我打开了***X端口,你过来连接我”。于是客户端向服务器的***X端口发送连接请求,建立一条数据链 路来传送数据。


你可能感兴趣的:(nginx)