Fork me on GitHub

Ftp服务端安装-Linux环境

目的

为什么要搭建FTP服务器,进入maven仓库下载Jar包时点击相应的链接进去会看到目录结构,这个就是ftp站点。可以随意的下载。

环境

Linux系统为CentOS6.5

安装步骤

查询是否已安装

rpm -qa | grep vsftpd

如果结果显示为“vsftpd-1.1.3-8”,则说明系统已经安装vsftpd服务器。若没有回复,即系统中没有安装。

如下图,说明没有安装

安装并设为开机启动

yum -y install vsftpd
chkconfig vsftpd on

服务基本命令参考

service vsftpd status  查看状态
service vsftpd start   启动
serivce vsftpd restart   重启
service vsftpd stop   停止

记得开启防火墙端口,不赘述。

浏览器中输入ftp://ip:21进入ftp服务器站点

配置

配置文件路径vi /etc/vsftpd/vsftpd.conf 

把匿名登录改为NO

设置指定的登录名单chroot_list_enable=YES表示所有用户都被限制在其主目录下(/home),chroot_list_enable=YES设置例外用户,目录不受限制。

其中chroot_list文件不存在,则用vi命令建立

cd  /etc/vsftpd
vi  chroot_list

 /etc/vsftpd/ftpusers文件意思是禁止以下用户登录ftp

 /etc/vsftpd/user_list文件意思是当userlist_deny=NO时仅允许以下user登录,当userlist_deny=YES时禁止以下用户登录ftp,并且也会核对ftpusers中的拒绝名单.

创建FTP用户

说明:系统自带的用户默认是可以直接进行ftp的,我们也可以单独创建只能ftp的用户

增加用户qy,指向目录/home/qy,禁止登录SSH权限。

useradd -d /home/qy -g ftp -s /sbin/nologin qy

passwd qy

删除用户

userdel -rf user  #用户名可以删除用户同时删除用户文件夹 -f强制删除正在登陆的用户,-r删除用户的同时删除底下的文件夹。

用Ftp客户端上传文件

 登陆成功后用put命令

上传成功

ftp基本命令

登录 : ftp  192.168.0.130        退出: bye

其它:  在终端输入help命令:

1 ftp IP地址 登陆ftp
2 dir 显示远程主机目录
3 cd remote-dir 进入远程主机目录
4 help [cmd] 显示ftp内部命令cmd的帮助信息,如:help get
5 get remote-file [local-file] 将远程主机的文件remote-file传至本地硬盘的local-file(本地文件夹)
6 put local-file [remote-file] 将本地文件local-file传送至远程主机
7 quit 同bye,退出ftp会话

FTP工具类

package com.autumn.ftp;

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 java.io.*;
import java.net.MalformedURLException;

public class FtpUtil {

    /**
     * 初始化ftp服务器
     */
    public static FTPClient initFtpClient(String hostname,Integer port,String username,String password) {
        FTPClient ftpClient = new FTPClient();
        ftpClient.setControlEncoding("utf-8");
        try {
            //连接ftp服务器
            ftpClient.connect(hostname, port);
            //登录ftp服务器
            ftpClient.login(username, password);
            //是否成功登录服务器
            int replyCode = ftpClient.getReplyCode();
            if(FTPReply.isPositiveCompletion(replyCode)){
                System.out.println("ftp服务器登录成功");
            }else{
                System.out.println("ftp服务器登录失败!!!replyCode为"+replyCode);
            }
        }catch (MalformedURLException e) {
            e.printStackTrace();
        }catch (IOException e) {
            e.printStackTrace();
        }
        return ftpClient;
    }

    /**
     * 登出
     * @param ftpClient
     * @return
     * @throws IOException
     */
    public static void logout(FTPClient ftpClient){
        try {
            ftpClient.logout();
            if(ftpClient.isConnected()){
                ftpClient.disconnect();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    /**
     * 上传文件
     * @param pathname ftp服务保存地址
     * @param fileName 上传到ftp的文件名
     * @param inputStream 输入文件流
     * @return
     */
    public static boolean uploadFile(FTPClient ftpClient, String pathname, String fileName,InputStream inputStream){
        boolean flag = false;
        try{
            System.out.println("开始上传文件");
            ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
            ftpClient.enterLocalPassiveMode();
            CreateDirecroty(ftpClient,pathname);
            ftpClient.makeDirectory(pathname);
            ftpClient.setControlEncoding("utf-8");
            ftpClient.storeFile(fileName, inputStream);
            System.out.println("上传结束");
            inputStream.close();
            //ftpClient.logout();
            flag = true;
            System.out.println("上传文件成功");

        }catch (Exception e) {
            System.out.println("上传文件失败");
            e.printStackTrace();
        }finally{
            /*if(ftpClient.isConnected()){
                try{
                    ftpClient.disconnect();
                }catch(IOException e){
                    e.printStackTrace();
                }
            }*/
            if(null != inputStream){
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return true;
    }


    /**
     * 下载文件
     * @param pathname FTP服务器文件目录
     * @param filename 文件名称(服务器)
     * @param localpath 下载到本地目录
     * @return */
    public static  boolean downloadFile(FTPClient ftpClient,String pathname, String filename, String localpath){
        boolean flag = false;
        OutputStream os=null;
        try {
            System.out.println("开始下载文件");
            //切换FTP目录
            ftpClient.changeWorkingDirectory(pathname);
            FTPFile[] ftpFiles = ftpClient.listFiles();
            for(FTPFile file : ftpFiles){
                if(filename.equalsIgnoreCase(file.getName())){
                    File localFile = new File(localpath + "/" + file.getName());
                    os = new FileOutputStream(localFile);
                    ftpClient.retrieveFile(file.getName(), os);
                    os.close();
                }
            }
            //ftpClient.logout();
            flag = true;
            System.out.println("下载文件成功");
        } catch (Exception e) {
            System.out.println("下载文件失败");
            e.printStackTrace();
        } finally{
            /*if(ftpClient.isConnected()){
                try{
                    ftpClient.disconnect();
                }catch(IOException e){
                    e.printStackTrace();
                }
            }*/
            if(null != os){
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return flag;
    }

    /**
     * 删除文件
     * @param pathname FTP服务器保存目录
     * @param filename 要删除的服务器文件名称
     * @return
     **/
    public static boolean deleteFile(FTPClient ftpClient,String pathname, String filename){
        boolean flag = false;
        try {
            System.out.println("开始删除文件");
            //切换FTP目录
            ftpClient.changeWorkingDirectory(pathname);
            ftpClient.dele(filename);
            //ftpClient.logout();
            flag = true;
            System.out.println("删除文件成功");
        } catch (Exception e) {
            System.out.println("删除文件失败");
            e.printStackTrace();
        } finally {
            /*if(ftpClient.isConnected()){
                try{
                    ftpClient.disconnect();
                }catch(IOException e){
                    e.printStackTrace();
                }
            }*/
        }
        return flag;
    }

    //改变当前目录
    public static boolean changeWorkingDirectory(FTPClient ftpClient,String directory) {
        boolean flag = true;
        try {
            flag = ftpClient.changeWorkingDirectory(directory);
            if (flag) {
                System.out.println("进入文件夹" + directory + " 成功!");
            } else {
                System.out.println("进入文件夹" + directory + " 失败!开始创建文件夹");
            }
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
        return flag;
    }

    //创建多层目录文件,如果有ftp服务器已存在该文件,则不创建,如果无,则创建
    public static boolean CreateDirecroty(FTPClient ftpClient,String remote) throws IOException {
        boolean success = true;
        String directory = remote + "/";
        // 如果远程目录不存在,则递归创建远程服务器目录
        if (!directory.equalsIgnoreCase("/") && !changeWorkingDirectory(ftpClient,new String(directory))) {
            int start = 0;
            int end = 0;
            if (directory.startsWith("/")) {
                start = 1;
            } else {
                start = 0;
            }
            end = directory.indexOf("/", start);
            String path = "";
            String paths = "";
            while (true) {
                String subDirectory = new String(remote.substring(start, end).getBytes("UTF-8"), "iso-8859-1");
                path = path + "/" + subDirectory;
                if (!existFile(ftpClient,path)) {
                    if (makeDirectory(ftpClient,subDirectory)) {
                        changeWorkingDirectory(ftpClient,subDirectory);
                    } else {
                        System.out.println("创建目录[" + subDirectory + "]失败");
                        changeWorkingDirectory(ftpClient,subDirectory);
                    }
                } else {
                    changeWorkingDirectory(ftpClient,subDirectory);
                }

                paths = paths + "/" + subDirectory;
                start = end + 1;
                end = directory.indexOf("/", start);
                // 检查所有目录是否创建完毕
                if (end <= start) {
                    break;
                }
            }
        }
        return success;
    }

    //判断ftp服务器文件是否存在
    public static boolean existFile(FTPClient ftpClient,String path) throws IOException {
        boolean flag = false;
        FTPFile[] ftpFileArr = ftpClient.listFiles(path);
        if (ftpFileArr.length > 0) {
            flag = true;
        }
        return flag;
    }

    //创建目录
    public static boolean makeDirectory(FTPClient ftpClient,String dir) {
        boolean flag = true;
        try {
            flag = ftpClient.makeDirectory(dir);
            if (flag) {
                System.out.println("创建文件夹" + dir + " 成功!");

            } else {
                System.out.println("创建文件夹" + dir + " 失败!");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return flag;
    }


    /**
     * 测试
     * @param args
     */
    public static void main(String[] args) throws FileNotFoundException {
        //初始化ftpclient
        FTPClient ftpClient = FtpUtil.initFtpClient("127.0.0.1", 21, "autumn", "123456");

        //上传文件
        InputStream is = new FileInputStream("D:\\1.txt");  //输入文件流
        FtpUtil.uploadFile(ftpClient,"/home/Y0/qy","2.txt",is);

        //下载文件
        FtpUtil.downloadFile(ftpClient,"/home/Y0/qy","2.txt","D:\\ftpdownload");

        //删除文件
        FtpUtil.deleteFile(ftpClient,"/home/Y0/qy","2.txt");

        //登出
        FtpUtil.logout(ftpClient);
    }
}

 

https://blog.csdn.net/wx5040257/article/details/78325074

 
posted @ 2019-03-05 23:30  秋夜雨巷  阅读(809)  评论(0编辑  收藏  举报