//创建ftpClient对象
FTPClient ftpClient= new FTPClient();
//创建ftp链接,默认是21端口
ftpClient.connect("139.199.90.60",21);
//登录ftp服务器,使用用户名和密码
ftpClient.login("ftpuser", "chen429736");
//上传文件
//读取本地文件
FileInputStream inputStream=new FileInputStream(new File("F://Cache//1.png"));
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
//加了这句解决
ftpClient.enterLocalPassiveMode();ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.setBufferSize(65535);
//设置上传的路径
ftpClient.changeWorkingDirectory("/home/ftpuser/www/images");
//修改上传格式
//第一个参数:服务器端文档名
//第二个参数,上传文档的inputStream
ftpClient.storeFile("rest.png", inputStream);
//关闭链接
ftpClient.logout();
//java.net.SocketTimeoutException: Read timed out
调用FTPClient.enterLocalPassiveMode();这个方法的意思就是每次数据连接之前,ftp client告诉ftp server开通一个端口来传输数据。为什么要这样做呢,因为ftp server可能每次开启不同的端口来传输数据,但是在linux上,由于安全限制,可能某些端口没有开启,所以就出现阻塞。
可是有一件事特别奇怪,就是同事在登录正式环境,上传文件,报错java.lang.NullPointerException ,可是在本地代码运行过程中,根本不会出现这个问题,但是当解决了本地上传问题后,这个问题就复现了出来,你猜是什么,原来是密码输入不正确!哎。。。。