FTP文件服务器

左心房为你撑大大i 提交于 2020-01-20 15:40:06
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在这个文件中加入黑名单用户

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!