前提条件:
本地Windows服务器下,文件上传运行正常,部署jar包Linux环境上,上传文件无反应;
1 在FTP服务中,涉及到客户端和服务器端的连接,连接就会涉及到端口的打开问题;
2 而端口的打开中,又涉及到主动模式和被动模式。
主动模式:客户端开放端口给服务端用;
被动模式:服务端开放端口给客户端用。
由于很多客户端在防火墙内,开放端口给服务器端用比较困难。所以用被动模式的时候比较多。
所以在storeFile(),listFiles()时之前需要调用
ftpClient.enterLocalPassiveMode();
这个方法的意思就是每次数据连接之前,ftp Client告诉ftp server开通一个端口用来传输数据。
/** * 请求连接Ftp * @param host * @param port * @param username * @param password * @return * @throws IOException */ private static FTPClient getConnect(String host, int port, String username, String password) { FTPClient ftp = new FTPClient(); //1、定义返回的状态码 int reply; try { //2、连接ftp(当前项目所部署的服务器和ftp服务器之间可以相互通讯,表示连接成功) ftp.connect(host, port); //3、输入账号和密码进行登录 ftp.login(username, password); //4、接受状态码(如果成功,返回230,如果失败返回503) reply=ftp.getReplyCode(); //5、根据状态码检测ftp的连接,调用isPositiveCompletion(reply)-->如果连接成功返回true,否则返回false if(!FTPReply.isPositiveCompletion(reply)){ ftp.disconnect();//说明连接失败,需要断开连接 return null; } ftp.enterLocalPassiveMode();// 这个方法的意思就是每次数据连接之前,ftp client告诉ftp server开通一个端口来传输数据。 } catch (IOException e) { e.printStackTrace(); } return ftp; }