一、创建ftp服务配置对象
public class FtpSettings {
private String host;
private String uname;
private String password;
private String root;
private String httpUrl;
public String getHttpUrl() {
return httpUrl;
}
public void setHttpUrl(String httpUrl) {
this.httpUrl = httpUrl;
}
@Override
public String toString() {
return "FtpSettings{" +
"host='" + host + '\'' +
", uname='" + uname + '\'' +
", password='" + password + '\'' +
", root='" + root + '\'' +
", httpUrl='" + httpUrl + '\'' +
'}';
}
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getRoot() {
return root;
}
public void setRoot(String root) {
this.root = root;
}
}
二、ftp文件上传工具类
/**
* 单个文件上传
* @param dir ftp存储路径
* @param newFileName 文件名称
* @param inputStream 输入流
* @param ftp ftp配置
* @return
*/
public static boolean uploadFileToFtp(String dir, String newFileName, FileInputStream inputStream, FtpSettings ftp){
FTPClient ftpClient = new FTPClient();
try {
ftpClient.connect(ftp.getHost());
ftpClient.login(ftp.getUname(), ftp.getPassword());
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.setControlEncoding("UTF-8");
ftpClient.setBufferSize(1024);
System.out.println("work:"+ftp.getRoot() + dir);
System.out.println(newFileName);
System.out.println(ftp);
ftpClient.changeWorkingDirectory(new String((ftp.getRoot() + dir).getBytes("GBK"),"iso-8859-1"));
ftpClient.storeFile(new String(newFileName.getBytes("GBK"),"iso-8859-1"), inputStream);
inputStream.close();
ftpClient.disconnect();
return true;
}catch (Exception e){
e.printStackTrace();
return false;
}
}
/**
* 上传目录到ftp
* @param dir 目录路径
* @param ftp
* @return
*/
public static boolean uploadDirToFtp(String dir, FtpSettings ftp) {
List<File> files = new ArrayList<>();
List<String> dirs = new ArrayList<>();
dirs.add(dir); //加入根目录
getFiles(dir, files, dirs); //获取根目录下的所有文件和目录
System.out.println(dirs);
FTPClient ftpClient = new FTPClient();
try {
ftpClient.connect(ftp.getHost());
ftpClient.login(ftp.getUname(), ftp.getPassword());
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.setControlEncoding("UTF-8");
ftpClient.setBufferSize(1024);
for (String d : dirs) {
System.out.println("创建目录" + d);
ftpClient.makeDirectory(new String((ftp.getRoot() + d).getBytes("GBK"), "iso-8859-1"));
}
for (File file : files) {
System.out.println("上传" + file.getName()+" "+ftp.getRoot() + file.getParent());
FileInputStream inputStream = new FileInputStream(file);
ftpClient.changeWorkingDirectory(new String((ftp.getRoot() + file.getParent().replace("\\","/")).getBytes("GBK"),"iso-8859-1"));
ftpClient.storeFile(new String(file.getName().getBytes("GBK"),"iso-8859-1"), inputStream);
inputStream.close();
}
ftpClient.disconnect();
return true;
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
/**
* 获取目录下所有文件
* @param dir
* @param files
* @param dirs
*/
public static void getFiles(String dir, List<File> files, List<String> dirs) {
File[] list = new File(dir).listFiles();
for (File f : list) {
if (f.isFile()) {
files.add(f);
} else if (f.isDirectory()) {
dirs.add(f.getPath().replace("\\", "/"));
getFiles(f.getPath(), files, dirs);
}
}
}