java将图片上传到ftp

来源:互联网 发布:pc安全软件 编辑:程序博客网 时间:2024/05/23 11:31
    
       //创建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 ,可是在本地代码运行过程中,根本不会出现这个问题,但是当解决了本地上传问题后,这个问题就复现了出来,你猜是什么,原来是密码输入不正确!哎。。。。