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