用FileZillaServer搭建FTP服务服务端、客户端

本文详细介绍了如何利用FileZilla Server搭建FTP服务器,并创建用户。接着,展示了如何配置客户端连接服务器。最后,通过Java代码实现了FTP文件的上传和下载功能,包括文件的上传、下载、目录操作等核心步骤。
摘要由CSDN通过智能技术生成

用FileZillaServer搭建FTP服务服务端、客户端

1. ## 下载地址

[https://www.filezilla.cn/download/client] (客户端下载)
[https://www.filezilla.cn/download/server] (服务端下载)

2. ## 搭建服务端
安装完服务端后,连接本地服务器
在这里插入图片描述
有可能会连接失败,需要生成证书,点击编辑–>设置–>SSL/TLS设置
在这里插入图片描述
在这里插入图片描述
生成证书之后就可以正常连接了。连接之后,点击编辑–>用户 创建客户端连接用户
在这里插入图片描述
3. ## 搭建客户端
上述操作完成后,可以搭建客户端环境了。
安装完客户端环境,直接输入服务端ip以及创建用户就可以连接(FTP默认端口是21)。
在这里插入图片描述
4. ## 客户端用代码进行文件上传和下载


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 FtpUtils {
    //ftp服务器地址
    public String hostname = "127.0.0.1";
    //ftp服务器端口号默认为21
    public Integer port = 21 ;
    //ftp登录账号	
    public String username = "FileZillaUser";
    //ftp登录密码
    public String password = "FileZillaUser";
 
    public FTPClient ftpClient = null;
 
    /**
     * 初始化ftp服务器
     */
    public void initFtpClient() {
        ftpClient = new FTPClient();
        ftpClient.setControlEncoding("utf-8");
        try {
            System.out.println("connecting...ftp服务器:"+this.hostname+":"+this.port);
            ftpClient.connect(hostname, port); //连接ftp服务器
            ftpClient.login(username, password); //登录ftp服务器
            int replyCode = ftpClient.getReplyCode(); //是否成功登录服务器
            if(!FTPReply.isPositiveCompletion(replyCode)){
                System.out.println("connect failed...ftp服务器:"+this.hostname+":"+this.port);
            }
            System.out.println("connect successfu...ftp服务器:"+this.hostname+":"+this.port);
        }catch (MalformedURLException e) {
            e.printStackTrace();
        }catch (IOException e) {
            e.printStackTrace();
        }
    }
 
    /**
     * 上传文件
     * @param pathname ftp服务保存地址
     * @param fileName 上传到ftp的文件名
     *  @param originfilename 待上传文件的名称(绝对地址) *
     * @return
     */
    public boolean uploadFile( String pathname, String fileName,String originfilename){
        boolean flag = false;
        InputStream inputStream = null;
        try{
            System.out.println("开始上传文件");
            inputStream = new FileInputStream(new File(originfilename));
            initFtpClient();
            ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE);
            //CreateDirecroty(pathname);           
            ftpClient.enterLocalPassiveMode();           
            ftpClient.setControlEncoding("utf-8");
            ftpClient.makeDirectory(pathname);//创建文件夹
            ftpClient.changeWorkingDirectory(pathname);//更换文件夹
            System.out.println("fileName1:"+fileName);
             flag=ftpClient.storeFile("123.docx", inputStream);
            inputStream.close();
            ftpClient.logout();
            System.out.println("是否上传成功:"+flag);
            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 上传到ftp的文件名
     * @param inputStream 输入文件流
     * @return
     */
    public boolean uploadFile( String pathname, String fileName,InputStream inputStream){
        boolean flag = false;
        try{
            System.out.println("开始上传文件");
            initFtpClient();
            ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE);
            System.out.println("开始上传文件:"+fileName+" 到:"+pathname);
            //CreateDirecroty(pathname);
            ftpClient.makeDirectory(pathname);
            ftpClient.changeWorkingDirectory(pathname);
            ftpClient.storeFile(fileName, inputStream);
            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;
    }
    //改变目录路径
    public boolean changeWorkingDirectory(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 boolean CreateDirecroty(String remote) throws IOException {
        boolean success = true;
        String directory = remote + "/";
        // 如果远程目录不存在,则递归创建远程服务器目录
        if (!directory.equalsIgnoreCase("/") && !changeWorkingDirectory(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("GBK"), "iso-8859-1");
                path = path + "/" + subDirectory;
                if (!existFile(path)) {
                    if (makeDirectory(subDirectory)) {
                        changeWorkingDirectory(subDirectory);
                    } else {
                        System.out.println("创建目录[" + subDirectory + "]失败");
                        changeWorkingDirectory(subDirectory);
                    }
                } else {
                    changeWorkingDirectory(subDirectory);
                }
 
                paths = paths + "/" + subDirectory;
                start = end + 1;
                end = directory.indexOf("/", start);
                // 检查所有目录是否创建完毕
                if (end <= start) {
                    break;
                }
            }
        }
        return success;
    }
 
    //判断ftp服务器文件是否存在
    public boolean existFile(String path) throws IOException {
        boolean flag = false;
        FTPFile[] ftpFileArr = ftpClient.listFiles(path);
        if (ftpFileArr.length > 0) {
            flag = true;
        }
        return flag;
    }
    //创建目录
    public boolean makeDirectory(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 pathname FTP服务器文件目录 *
     * @param filename 文件名称 *
     * @param localpath 下载后的文件路径 *
     * @return */
    public  boolean downloadFile(String pathname, String filename, String localpath){
        boolean flag = false;
        OutputStream os=null;
        try {
            System.out.println("开始下载文件");
            initFtpClient();
            //切换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 boolean deleteFile(String pathname, String filename){
        boolean flag = false;
        try {
            System.out.println("开始删除文件");
            initFtpClient();
            //切换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;
    }
 
  
}

在这里插入代码片

搭建一个 FileZilla ServerFTP 服务器,您可以按照以下步骤进行操作: 1.首先,您需要下载 FileZilla Server 安装程序并安装到您的计算机上。您可以在 FileZilla 官方网站上找到最新版本的安装程序,并确保选择适用于您操作系统的版本。 2.安装完成后,打开 FileZilla Server 管理界面。在开始菜单中找到 "FileZilla Server Interface",然后点击打开。 3.在 FileZilla Server 管理界面中,点击 "Edit" -> "Users" 来添加一个新用户。在弹出的窗口中,点击 "Add" 按钮并输入用户名。 4.设置用户的访问权限。您可以选择用户只读还是可写,并可以指定用户访问的目录。 5.在 "Shared Folders" 部分,点击 "Add" 按钮来添加共享文件夹。选择您想要共享的目录,并指定访问权限。 6.设置服务器的监听端口和连接模式。在 FileZilla Server 界面的左侧,点击 "Settings" -> "General settings"。您可以选择监听所有 IP 地址或仅限于特定 IP 地址。 7.配置 FTP 服务器的加密选项。在 FileZilla Server 界面的左侧,点击 "Settings" -> "FTP over TLS settings"。您可以选择使用明文传输或者启用 SSL/TLS 加密。 8.保存设置并启动 FTP 服务器。点击 FileZilla Server 界面的左上角的 "OK" 按钮,并在界面的右上角点击 "Connect" 按钮来启动服务器。 现在您已经成功搭建了一个 FileZilla ServerFTP 服务器。您可以使用任何支持 FTP 协议的客户端连接到服务器,并使用您添加的用户名和密码进行登录。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值