import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
public class FtpUtil {
private static final Logger logger = LoggerFactory.getLogger(FtpUtil.class);
/**
* 获取FTPClient对象
*
* @param ftpHost 服务器IP
* @param ftpPort 服务器端口号
* @param ftpUserName 用户名
* @param ftpPassword 密码
* @return FTPClient
*/
public FTPClient getFtpClient(String ftpHost, int ftpPort, String ftpUserName, String ftpPassword) {
FTPClient ftpClient = new FTPClient();
try {
ftpClient = new FTPClient();
// 连接FPT服务器,设置IP及端口
ftpClient.connect(ftpHost, ftpPort);
// 设置用户名和密码
ftpClient.login(ftpUserName, ftpPassword);
// 设置连接超时时间,5000毫秒
ftpClient.setConnectTimeout(50000);
// 设置中文编码集,防止中文乱码
ftpClient.setControlEncoding("UTF-8");
if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
logger.info("FTP connection FAILED");
ftpClient.disconnect();
} else {
logger.info("FTP connection SUCCESS");
}
} catch (IOException e) {
logger.error(e.getMessage(), e);
logger.info("The FTP IP address may be wrong, please configure it correctly");
}
return ftpClient;
}
/**
* 关闭
*
* @param ftp FTPClient
* @return bool
*/
public boolean closeFtp(FTPClient ftp) {
try {
ftp.logout();
} catch (Exception e) {
logger.info("FTP close FAILED");
logger.error(e.getMessage(), e);
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
logger.info("FTP close FAILED");
logger.error(ioe.getMessage(), ioe);
}
}
}
return false;
}
/**
* 上传文件
*
* @param ftp FTPClient
* @param fileName String
* @param inputStream InputStream
* @param ftpPath String
* @return bool
* @throws IOException 异常
*/
public boolean uploadFile(FTPClient ftp, String fileName, InputStream inputStream, String ftpPath)
throws IOException {
boolean flag = false;
// 设置PassiveMode传输
ftp.enterLocalPassiveMode();
// 设置二进制传输,使用BINARY_FILE_TYPE,ASC容易造成文件损坏
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
// 判断FPT目标文件夹时候存在不存在则创建
if (!ftp.changeWorkingDirectory(ftpPath)) {
ftp.makeDirectory(ftpPath);
}
// 跳转目标目录
ftp.changeWorkingDirectory(ftpPath);
// 上传文件
try {
ftp.enterLocalPassiveMode();
ftp.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);
flag = ftp.storeFile(new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8),
inputStream);
} catch (IOException e) {
logger.error("FTP Upload FAIL {}", e.getMessage(), e);
}
if (flag) {
logger.info("FTP Upload SUCCESS");
} else {
logger.error("FTP Upload FAIL");
}
return flag;
}
}
FTP连接及上传工具类-FtpUtil
最新推荐文章于 2024-07-27 13:31:57 发布