java使用ftp上傳文件出現false()

http://blog.csdn.net/beyondlpf/article/details/9343781這是我解決的的原文地址解析原因


在項目中使用commons-net.jar實現FTP文件的下載,在windows xp上運行正常,但是放到linux上,卻出現問題,程序運行到

FTPClient.listFiles()或者FTPClient.retrieveFile()方法時,就停止在那裏,什麼反應都沒有,出現假死狀態。google一把,發現很多人也出現了此類問題,最終在一個帖子裏找到了解決辦法。在調用這兩個方法之前,調用FTPClient.enterLocalPassiveMode();這個方法的意思就是每次數據連接之前,ftp client告訴ftp server開通一個端口來傳輸數據。爲什麼要這樣做呢,因爲ftp server可能每次開啓不同的端口來傳輸數據,但是在linux上或者其他服務器上面,由於安全限制,可能某些端口沒有開啓,所以就出現阻塞。OK,問題解決。


public void testFtpClient() {
			//穿件一個ftp客戶對象
			FTPClient ftpClient=new FTPClient();
			FileInputStream inputStream = null;
			try {
				//創建ftp鏈接
				ftpClient.connect("192.168.139.128", 21);
				//登陸ftp服務器  用戶名 密碼
				ftpClient.login("ftpuser", "a");
				//讀取本地文件
				inputStream=new FileInputStream(new File("F:\\照片\\1.jpg"));
				//設置上傳路徑
				ftpClient.changeWorkingDirectory("/home/ftpuser/www/image/");
				//修改上傳文件格式
				ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
				ftpClient.setControlEncoding("UTF-8"); 
				 ftpClient.enterLocalPassiveMode();
				//上傳文件   上傳文件名  上傳文檔的inputStream
				System.out.println(ftpClient.storeFile(new String("hello.jpg".getBytes("UTF-8"),"iso-8859-1"), inputStream));
			} catch (IOException e) {
				e.printStackTrace();
			}finally{
				try {
					ftpClient.logout();
				} catch (IOException e) {
					e.printStackTrace();
				}
					if(inputStream!=null){
						try {
							inputStream.close();
						} catch (IOException e) {
							e.printStackTrace();
						}
					}
				
			}
			
			
		
	}	
以上是我修改後的代碼 測試成功的

我的環境是在一個虛擬機上搭建一個ftp圖片服務器  用來保存我所有的文件等

之前沒有這句話就一直卡死在上傳那句代碼  但是並沒有報錯,假死幾十秒之後就返回了false  我估計是鏈接超時,因爲沒有開方端口。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章