import java.io.InputStream;
import java.io.Serializable;
import lombok.Data;
@Data
public class FtpBean implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* 部分信息如果传空的话,默认赋值,根据业务需求修改
*/
// FTP服务器地址
private String address;
// FTP服务器端口号
private String port;
// FTP服务器用户名
private String username;
// FTP服务器密码
private String password;
// 上传文件名称
private String fileName;
// 基本路径
private String basepath;
// 文件输入流
private InputStream inputStream;
// 保存文件方式 默认:1-覆盖;2-文件名称后面+(递增数据)
private Integer saveFileType;
}
import java.io.IOException;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class FtpUtil {
public static boolean uploadFile(FtpBean ftpBean) {
boolean result = false;
FTPClient ftp = new FTPClient();
try {
int reply;
ftp.connect(ftpBean.getAddress(), Integer.valueOf(ftpBean.getPort()));// 连接FTP服务器
// 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
ftp.login(ftpBean.getUsername(), ftpBean.getPassword());// 登录
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
log.error("登录ftp失败!");
return result;
}
String tempPath = ftpBean.getBasepath();
String fileName = ftpBean.getFileName();
if (!ftp.changeWorkingDirectory(ftpBean.getBasepath())) {
//判断目录是否存在,如果目录不存在创建目录,目录存在则跳转到此目录下
String []tempPathList = tempPath.split("/");
for (String dir : tempPathList) {
if(dir != null && dir != ""){
if (!ftp.changeWorkingDirectory(dir)) {
if (!ftp.makeDirectory(dir)) {
return result;
} else {
ftp.changeWorkingDirectory(dir);
}
}
}
}
}
//保存文件方式 默认:1-覆盖;2-文件名称后面+(递增数据)
if(ftpBean.getSaveFileType() == 2){
FTPFile[]file = ftp.listFiles();
Integer i = 1;
//采用递归,文件名重复自动加(i)
fileName = aaa(file, i, fileName, fileName);
}
//设置上传文件的类型为二进制类型
ftp.setFileType(FTP.BINARY_FILE_TYPE);
//设置模式很重要
ftp.enterLocalActiveMode();
//上传文件
result = ftp.storeFile(fileName, ftpBean.getInputStream());
if(!result){
return result;
}
ftpBean.getInputStream().close();
ftp.logout();
result = true;
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
}
}
}
return result;
}
//递归重命名去重复
public static String aaa(FTPFile[] file, int i, String fileName, String nameFlag){
boolean isOk = true;
for (FTPFile file2 : file) {
String flag = file2.getName();
if(nameFlag.equals(flag)){
String []fileNames = fileName.split("\\.");
if(fileNames.length > 0){
nameFlag = "";
}
for (int j = 0; j < fileNames.length; j++) {
if(j == fileNames.length-1){
nameFlag = nameFlag+"("+i+")."+fileNames[j];
}else if(j == fileNames.length-2){
nameFlag = nameFlag + fileNames[j];
}else{
nameFlag = nameFlag + fileNames[j] + ".";
}
}
i += 1;
isOk = false;
}else{
isOk = true;
}
}
if(isOk == false){
nameFlag = aaa(file, i, fileName, nameFlag);
}
return nameFlag;
}
}
<!-- ftp文件服务器 -->
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-ftp</artifactId>
<version>2.13.2</version>
</dependency>
1.限制IP上传文件 #禁用所有ip /etc/hosts.deny vsftpd:ALL #允许部分ip上传 /etc/hosts.allow vsftpd:10.92.1.17 2.用户ftp用户密码 passwd + 用户名 3.限制访问自身目录, chroot_local_user=YES chroot_list_enable=YES allow_writeable_chroot=YES 4.拒绝用户登录 usermod -s /usr/sbin/nologin ftpuser #重启服务 systemctl restart vsftpd.service
1、检查是否安装 了vsftpd,如果未安装 则安装vsftpd。 1)查看系统中是否安装了vsftpd,可以通过执行命令 :rpm -qa | grep vsftpd 2)如果没有安装 vsftpd,则安装 :yum -y install vsftpd 2、创建ftp用户,比如ftp_test。命令:useradd -s /sbin/nologin -d /oradata/tkgmftp tkgmftp 注意: 1)目录尽量不要选择根目录下,这里是/home/ftp_test,并且ftp_test这个目录不要手动创建,否则权限会有问题,执行命令的时候会自动创建 2)注意目录的权限,如果有需要,应该设置相应的权限 3、为ftp_test用户创建密码。命令:passwd tkgmftp 执行之后输入2次密码确认就设置好了密码。 4、编辑vsftpd配置文件,命令:vim /etc/vsftpd/vsftpd.conf 找到anonymous_enable这个配置项,默认是YES,修改成NO,表示不允许匿名用户登录。 5、启动vsftp服务,命令:systemctl start vsftpd.service 6、查看ftp服务的状态,命令:systemctl status vsftpd.service 7、用ftp客户端进行连接访问。FTP 常用设置1)如果客户端登录vsftp很慢,加上reverse_lookup_enable=NO表示不查找dns服务器2)local_root=path 指定本地用户根目录3)anon_root=path 指定匿名用户根目录4)user_config_dir=path 指定用户个人配置文件所在的目录,用户的个人配置文件为该目录中的同名文件5)anon_max_rate=0 指定匿名用户最大的传输速度6)local_max_rate=0 指定本地用户最大的传输速度7)max_clients=0 指定vsftp允许的最大连接数8)max_per_ip=0 指定每个ip地址允许建立的最大连接数9)accept_timeout=60 指定pasc模式的连接超时时间(秒)10)connect_timeout=60 指定port方式的连接超时时间11)data_connection_timeout=300 ftp数据的连接超时时间12)idle_session_timeout=600 限制空闲时间过多久就中断连接13)chroot_list_enable=yes 限制用户在宿主目录中,不能通过cd切换到系统的其他目录中14)chroot_list_file=/etc/vsftpd/chroot_list 在chroot_list中存放的是被锁定的用户列表,这些用户只能在其宿主目录中操作,不能通过cd切换目录到系统的其他目录中去15)ftpd_banner=char 设置ftp登录时的欢迎信息16)限制客户端可连接的ip地址
tcp_wrappers=yes:tcp_wrappers是一种使用访问控制列表(acl)来防止主机名和主机地址欺骗的保护机制
17)限制黑名单用户userlist_enable=yesvim /etc/vsftpd/user_list在这个文件中加入黑名单用户
来源:https://www.cnblogs.com/liushuchen/p/11041984.html