public class FTPUtils {
private static final Logger log = Logger.getLogger(FTPUtils.class);
private FTPUtils() {
}
public static boolean upload(String hostname, int port, String username, String password, String workingPath, InputStream inputStream, String saveName) {
boolean flag = false;
FTPClient ftpClient = new FTPClient();
//1 测试连接
if(connect(ftpClient, hostname, port, username, password)) {
try {
//2 检查工作目录是否存在
if(ftpClient.changeWorkingDirectory(workingPath)) {
// 3 检查是否上传成功
if(storeFile(ftpClient, saveName, inputStream)) {
flag = true;
disconnect(ftpClient);
}
}
}catch (Exception e) {
// TODO: handle exception
}
}
return flag;
}
/**
* 断开链接
* @param ftpClient
*/
public static void disconnect(FTPClient ftpClient) {
if(ftpClient.isConnected()) {
try {
ftpClient.disconnect();
log.info("ftp已关闭连接");
}catch (Exception e) {
log.error("ftp没有关闭连接");
e.printStackTrace();
}
}
}
public static boolean connect(FTPClient ftpClient, String hostname, int port, String username, String password) {
boolean flag = false;
try {
ftpClient.connect(hostname, port);
ftpClient.enterLocalPassiveMode();
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.setControlEncoding("UTF-8");
if(ftpClient.login(username, password)) {
log.info("连接ftp成功");
flag = true;
}else {
log.error("连接ftp失败,可能用户名或密码错误");
try {
disconnect(ftpClient);
}catch (Exception e) {
e.printStackTrace();
}
}
} catch (IOException e) {
log.error("ftp连接失败,可能ip或端口错误");
e.printStackTrace();
}
return flag;
}
public static boolean storeFile(FTPClient ftpClient, String saveName, InputStream fileInputStream) {
boolean flag = false;
try {
if(ftpClient.storeFile(saveName, fileInputStream)) {
flag = true;
log.info("上传成功");
disconnect(ftpClient);
}
}catch (Exception e) {
log.error("上传失败");
disconnect(ftpClient);
e.printStackTrace();
}
return flag;
}
}