QM.C

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
package cn.gzsxt.base.utils;

import java.io.IOException;
import java.io.InputStream;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;

public class FtpUtils {

	FTPClient client = null;
	
	/**
	 * 文件上传
	 * @param hostName   ftp主机名
	 * @param port       ftp主机端口
	 * @param username   上传用户名
	 * @param password   上传用户密码
	 * @param basePath   上传基础路径
	 * @param filePath   文件存放路径
	 * @param remoteFileName  上传后文件名称
	 * @param in         文件输入流
	 * @return
	 */
	public static boolean upload(String hostName,int port,String username,String password,String basePath,
			String filePath,String remoteFileName,InputStream in){
		
		//1、创建客户端
		FTPClient client = new FTPClient();

		try {
			
			//2、建立和服务端的链接
			client.connect(hostName, port);
			
			//3、登陆服务端
			client.login(username, password);
			
			//4、指定图片上传的方式为二进制,即字节流
			client.setFileType(FTP.BINARY_FILE_TYPE);
			
			//5、指定上传的访问模式为被动模式    说明:大部分的操作系统,默认的都是被动模式,并且禁用了主动了模式
			client.enterLocalPassiveMode();
			
			//6、指定上传的目录     默认目录 是当前ftpuser用户的家目录   
			boolean flag = client.changeWorkingDirectory(basePath+filePath);
			
			//如果切换目录失败,则创建指定的目录
			if(!flag){
				
				//创建目录失败,则可能是存在没有创建的父目录
				if(!client.makeDirectory(basePath+filePath)){
					String tempPath = basePath;
					
					String[] split = filePath.split("/");
					for (String string : split) {
						if(null!=string && !"".equals(string)){
							tempPath = tempPath+"/"+string;
							
							//先判断第一层路径是否存在,如果不存在,则创建
							if(!client.changeWorkingDirectory(tempPath)){
								//如果创建第一层路径成功,则判断是否能切换到这一层路径
								if(client.makeDirectory(tempPath)){
									//切换失败,则返回false
									if(!client.changeWorkingDirectory(tempPath)){
										return false;
									}
								//如果创建第一层路径失败,则直接返回false
								}else{
									
									return false;
								}
							}
						
						//如果有空路径,则直接跳过
						}else{
							continue;
						}
					}
				}else{
					//创建成功,则直接切换到指定的目录
					if(!client.changeWorkingDirectory(basePath+filePath)){
						return false;
					}
				}
				
			}
			
			//8、上传
			boolean result = client.storeFile(remoteFileName, in);
			
			return result;
			
			
		} catch (Exception e) {
			
			e.printStackTrace();
			
			return false;
		}finally {
			//9,退出登录,并关闭连接
			try {
				if(client.logout()){
					client.disconnect();
					
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
	}
}

  

posted on 2019-07-26 19:28  QM.C  阅读(763)  评论(0编辑  收藏  举报