配置文件
#图片访问路径 nginx 静态资源配置
upload-server=http://47.104.216.12/images/
#图片服务器存放地址
upload-path=/usr/local/static/images/
# 图片服务器 ftp IP
ftp-host=47.104.216.12
# 图片服务器 ftp 端口
ftp-port=21
# 公司的 FTP服务器 用户名
ftp-username=root
# 公司的 FTP服务器 密码
ftp-password=njmolei098Az~+
#FTP服务器分为主动和被动模式
#主动:FTP 客户端 连接 FTP服务器21端口 、FTP 服务器用20端口和客户端 > 1023端口 进行数据传输
#被动:FTP 客户端 连接 FTP服务器21端口 、FTP服务器用大于1023端口和客户端 > 1023端口 进行数据传输
#设置ftp 客户端开放端口范围 最小值
ftp-min-port=6666
#f设置ftp 客户端开放端口范围 最大值
ftp-max-port=8888
JAVA 工具类
package com.ningpai.third.common;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
* ftp 工具类
*
* @author MENG
* @version 2018/4/18
* @see
*/
public class FtpUtils
{
private static Logger logger = LoggerFactory.getLogger(FtpUtils.class);
private static String encoding = "UTF-8";
private FTPClient ftpClient;
private String username;
private String password;
private String host;
private String port;
private String maxPort;
private String minPort;
public FtpUtils(String username, String password, String host, String port, String maxPort, String minPort)
{
this.username = username;
this.password = password;
this.host = host;
this.port = port;
this.minPort = minPort;
this.maxPort = maxPort;
}
/**
*
* 连接Ftp服务器
*
*
* @return
*/
public void connectFtp()
{
try
{
ftpClient.setControlEncoding(encoding);
//连接
ftpClient.connect(host, Integer.valueOf(port));
// 登录
ftpClient.login(username, password);
//设置ftp客户端开发的端口
ftpClient.setActivePortRange(Integer.valueOf(minPort),Integer.valueOf(maxPort));
//将超时设置为5分钟 设置处理文件上载或下载时发送控制连接存活信息的等待时间。
ftpClient.setControlKeepAliveTimeout(300);
//5分钟 数据连接超时
ftpClient.setDataTimeout(300000);
logger.info("设置了 setDataTimeout");
// 设置文件传输类型为二进制
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
int reply = ftpClient.getReplyCode();
// 验证是否登陆成功
if (!FTPReply.isPositiveCompletion(reply))
{
ftpClient.disconnect();
logger.error("FTP服务器 登录失败!!!请检查用户名和密码 username:{},password:{}",username,password);
}
}
catch (IOException e)
{
logger.error("FTP 服务器连接失败!!! ip:{},port:{},username:{},password:{}",new String[]{host,port+"",username,password});
}
}
/**
* 关闭Ftp连接
*
* @throws IOException
*/
public void closeFptConnect()
{
if(ftpClient != null)
{
try
{
ftpClient.logout();
logger.info("FTP 服务器登出......");
}
catch (IOException e)
{
logger.error("FTP 服务器登出失败!!!",e);
}
}
if(ftpClient.isConnected())
{
try
{
ftpClient.disconnect();
logger.info("FTP 服务器连接关闭......");
}
catch (IOException e)
{
logger.error("FTP 服务器连接关闭失败!!!",e);
}
}
}
/**
* 将文件上传 spring
*/
public void uploadMultipartFile(MultipartFile file, String newFileName, String uploadPath)
throws IOException
{
InputStream inputStream = null;
inputStream = file.getInputStream();
ftpClient.makeDirectory(uploadPath);
ftpClient.changeWorkingDirectory(uploadPath);
ftpClient.storeFile(newFileName, inputStream);
inputStream.close();
}
/**
* 将本地文件上传
*/
public void uploadFile(File file, String newFileName, String uploadPath)
throws IOException
{
InputStream inputStream = null;
inputStream = new FileInputStream(file);
ftpClient.makeDirectory(uploadPath);
ftpClient.changeWorkingDirectory(uploadPath);
ftpClient.storeFile(newFileName, inputStream);
inputStream.close();
}
/**
* 连接上传图片服务器的ftp
*/
public static FtpUtils connectUploadImageServer()
{
Properties properties = PropertiesUtils.readUploadProperties();
FtpUtils ftpUtils = new FtpUtils(properties.getProperty("ftp-username"),properties.getProperty("ftp-pasword"),properties.getProperty("ftp-host"),properties.getProperty("ftp-port"),properties.getProperty("ftp-max-port"),properties.getProperty("ftp-min-port"));
return ftpUtils;
}
}