public classFtpUtils {private static final Logger logger = LoggerFactory.getLogger(FtpUtils.class);private staticFTPClient ftpClient;/***@Description ftp登录
*@Param [ftpHost, ftpUserName, ftpPassword, ftpPort]
*@returnorg.apache.commons.net.ftp.FTPClient
**/
public static FTPClient getFTPCLient(String ftpHost,String ftpUserName,String ftpPassword,intftpPort){try{
ftpClient= newFTPClient();//连接FTP服务器
ftpClient.connect(ftpHost,ftpPort);//登录FTP服务器
ftpClient.login(ftpUserName,ftpPassword);//设置编码格式(支持中文)//ftpClient.setControlEncoding("UTF-8");//设置传输格式为二进制
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.enterLocalPassiveMode();if(!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())){
logger.error("未连接到FTP,用户名或密码错误");
ftpClient.disconnect();
}else{
logger.info("FTP连接成功");
}
}catch(Exception e){
logger.error(HikLog.toLog("ftp connect error",e);
}returnftpClient;
}/***@Description 判断ftp是否连接成功
*@Param []
*@returnboolean
**/
public static booleanisConnect(){if (ftpClient!=null &&ftpClient.isConnected()){returnFTPReply.isPositiveCompletion(ftpClient.getReplyCode());
}else{
logger.info("ftp连接断开");return false;
}
}/***@Description 关闭ftp连接
*@Param []
*@returnvoid
**/
public static voidclose(){if (ftpClient!=null &&ftpClient.isConnected()){try{
ftpClient.logout();
ftpClient.disconnect();
}catch(Exception e){
logger.error("ftp close error",e);
}
}
}/***@Description 检查文件是否存在
*@Param [ftpPath]
*@returnboolean
**/
public static booleanisFileExist(String ftpPath){boolean result = true;try{
ftpClient.listFiles(ftpPath);
}catch(Exception e){
result= false;
logger.error("check file error",e);
}returnresult;
}/***@Description 从ftp上下载图片
*@Param [filePath, fileName]
*@returnjava.lang.String
**/
public staticString downloadPic(String filePath,String fileName) {
InputStream is= null;
ByteArrayOutputStream baos= newByteArrayOutputStream();byte[] data = null;
String picBASE64= "";if(isFileExist(filePath)){try{
ftpClient.changeToParentDirectory();
ftpClient.changeWorkingDirectory(filePath);
is=ftpClient.retrieveFileStream(fileName);
// 程序运行在windows操作系统,下载的文件名称有中文时,可以用下面的两行代码//ftpClient.changeWorkingDirectory(new String(filePath.getBytes("UTF-8"),"iso-8859-1"));//is = ftpClient.retrieveFileStream(new String(fileName.getBytes("UTF-8"),"iso-8859-1"));
byte[] buffer = new byte[1024];int n = 0;if (is!=null){while(-1 != (n =is.read(buffer))){
baos.write(buffer,0,n);
}
data=baos.toByteArray();
BASE64Encoder encoder= newBASE64Encoder();
picBASE64=encoder.encode(data);
is.close();
}else{
logger.error("ftp获取文件流失败",e);}
}catch(Exception e){
logger.error("download error",e);
}
}returnpicBASE64;
}
}