FTPUtil 工具的封装,此方法用于封装上传时多目录文件,单目录的可在注释部分寻找
package com.thinkgem.jeesite.common.utils;
import com.google.common.collect.Lists;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;
import java.net.SocketException;
import java.net.URLDecoder;
import java.util.List;
import java.util.StringTokenizer;
import static com.thinkgem.jeesite.common.config.Global.getConfig;
/**
* 与ftp服务进行连接
*/
public class FTPUtil {
private static final Logger logger = LoggerFactory.getLogger(FTPUtil.class);
private static FTPClient ftpClient = null;
private final static String ftphostaddr = getConfig("ftphostaddr");//服务器地址
private final static String ftppath = getConfig("ftppath");//操作的服务器目录
private final static String ftpname = getConfig("ftpname");//服务器登录名
private final static String ftppwd = getConfig("ftppwd");//登录密码
private final static String ftpport = getConfig("ftpport");//登录端口
private final static String localpath = getCurentContentPath();
private final static String fileSeparator = getConfig("ftp.upload");
private final static String upfile = getConfig("ftppath");
public void downfile(String filename){
this.loginFtp();
downFile(filename);
}
/**
* 从文件服务器上下载文件到本地
* @param filename
*/
public static void downFile(String filename) {
try{
String flieName = filename.substring(filename.lastIndexOf("/") + 1);
logger.info("所要下载的文件名称fileName={}",flieName);
//4.指定要下载的目录
ftpClient.changeWorkingDirectory(StringUtils.remove(filename,flieName));// 转移到FTP服务器目录
//5.遍历下载的目录
ftpClient.enterLocalPassiveMode();
FTPFile[] fs = ftpClient.listFiles();
for (FTPFile ff : fs) {
//解决中文乱码问题,两次解码
byte[] bytes=ff.getName().getBytes("iso-8859-1");
String fn=new String(bytes,"utf8");
if (fn.equals(flieName)|| ff.getName().equals(flieName)) {