• jsp ftp上传下载实例


    虽然已经实现了FTP上传,但是目前却只能上传英文路径,该问题依旧等待解决的方案

    一、所需软件:

    FTP服务器:ServUSetup.exe 下载地址为:http://www.rhinosoft.com/__release/ServUSetup.exe

    Java FTP 库edtFTPj/Free:下载地址为:http://www.enterprisedt.com/products/edtftpj/download/edtftpj.zip

    二、edtFTPj/Free实现了以下功能

    1、上传指定文件夹(包括子文件和文件夹) uploadFolder(String folderName, String ftpPath)

    2、下载FTP上指定的文件夹 downloadFolder(String ftppath, String outdir, String ftpdir)

    3、上传指定文件夹下的所有文件到FTP指定目录下 uploadAllFilesInFolder(String folderName, String ftpPath)

    4、删除指定文件夹下的所有文件(包括子文件夹里面的文件,但由于不知怎么删除目录,所以暂没有做删除目录的功能) deleteAllFilesInFolder(String ftppath, String ftpdir)

    5、删除指定文件 String deleteFile(String ftpPath)

    6、判断FTP上目录是否存在 isDirExist(String dirname, String[] files)

    7、上传单个文件 uploadFile(String clientFileName, String ftpPath)

    8、下载单个文件 downloadFile(String remoteFileName,String localFileName)

    9、删除指定文件夹下的所有文件(不包括子文件夹,只是删除指定文件夹下的文件)

    三、实现过程

    0、安装FTP服务器,配置域名、用户名、密码以及根目录

    1、连接FTP服务器

    /**************************************************************************

    调用该构造函数的格式为:FtpService ftp=new FtpService("127.0.0.1","21","admin","admin");

    打印效果如下则表示连接服务器成功

    开始登录
    登录成功
    已转入根目录

    **************************************************************************/

    view plaincopy to clipboardprint?
    /** 
         * 初始化连接 
         * @param pFtpServer FTP服务器地址 
         * @param pFtpPort FTP服务器端口 
         * @param pFtpUserName FTP登录用户名 
         * @param pFtpPassword FTP登录密码 
         * @throws IOException 
        */    
        public FtpService(String pFtpServer, String pFtpPort, String pFtpUserName,String pFtpPassword) throws Exception   
        {   
            this.ftpServer = pFtpServer;   
              if (pFtpPort.trim().equals(""))   
               this.ftpPort = "21";   
              else 
               this.ftpPort = pFtpPort;   
              if (pFtpUserName.trim().equals(""))   
               this.ftpUserName = "Anonymous";   
              else 
               this.ftpUserName = pFtpUserName;   
              this.ftpPassword = pFtpPassword;   
              try {      
                        ftpClient = new FTPClient(); //ftpServer, Integer.parseInt(ftpPort)   
                        ftpClient.setRemoteHost(ftpServer);   
                        ftpClient.setRemotePort(Integer.parseInt(ftpPort));   
                        ftpClient.setControlEncoding("gbk"); //加上这一句后在 edtftpj 2.0.1 下就可以传中文文件名了   
                        System.out.println("开始登录");   
                        ftpClient.connect();   
                        ftpClient.login(ftpUserName, ftpPassword);   
                        System.out.println("登录成功");   
                        ftpClient.chdir("\\"); //在有的ftp服务器运行会出错,用ftpClient.chdir("/")又可以了   
                        System.out.println("已转入根目录");   
                        isLogin = true;   
              } catch (Exception e) {   
               throw new Exception(e.getMessage());   
              }   
       } 
    /**
         * 初始化连接
         * @param pFtpServer FTP服务器地址
         * @param pFtpPort FTP服务器端口
         * @param pFtpUserName FTP登录用户名
         * @param pFtpPassword FTP登录密码
         * @throws IOException
        */ 
        public FtpService(String pFtpServer, String pFtpPort, String pFtpUserName,String pFtpPassword) throws Exception
        {
        this.ftpServer = pFtpServer;
           if (pFtpPort.trim().equals(""))
            this.ftpPort = "21";
           else
            this.ftpPort = pFtpPort;
           if (pFtpUserName.trim().equals(""))
            this.ftpUserName = "Anonymous";
           else
            this.ftpUserName = pFtpUserName;
           this.ftpPassword = pFtpPassword;
           try {   
                     ftpClient = new FTPClient(); //ftpServer, Integer.parseInt(ftpPort)
                     ftpClient.setRemoteHost(ftpServer);
                     ftpClient.setRemotePort(Integer.parseInt(ftpPort));
                     ftpClient.setControlEncoding("gbk"); //加上这一句后在 edtftpj 2.0.1 下就可以传中文文件名了
                     System.out.println("开始登录");
                     ftpClient.connect();
                     ftpClient.login(ftpUserName, ftpPassword);
                     System.out.println("登录成功");
                     ftpClient.chdir("\\"); //在有的ftp服务器运行会出错,用ftpClient.chdir("/")又可以了
                     System.out.println("已转入根目录");
                     isLogin = true;
           } catch (Exception e) {
            throw new Exception(e.getMessage());
           }
       }

    2、实现上传文件函数:上传指定文件夹下的所有文件到FTP指定目录下
    view plaincopy to clipboardprint?
    /** 
         * 上传指定文件夹下的所有文件到FTP指定目录下 
         * @param folderName 本地要上传的文件夹全路径 
         * @param ftpPath FTP上对于根目录的路径 
         * @throws IOException 
        */       
        public void uploadAllFilesInFolder(String folderName, String ftpPath) throws   
                Exception {   
            if (isLogin) {   
                String strMsg = "";   
                try {   
                    File file = new File(folderName);   
                    if (file.isDirectory()) {   
                        ftpClient.chdir("\\");   
                        ftpClient.setType(FTPTransferType.BINARY);   
                        if (checkFolderIsExist(ftpPath)) {   
                            ftpClient.chdir(ftpPath);   
                        } else {   
                            createFolder(ftpPath);   
                        }   
                        File[] files = file.listFiles();   
                        for (int i = 0; i < files.length; i++) {   
                            if (files[i].isFile()) {   
                                try {   
                                    ftpClient.put(files[i].getPath(),   
                                                  files[i].getName());   
                                } catch (Exception ee) {   
                                    strMsg += "upload file<<:" + files[i].getPath() +   
                                            ">> error!Message:" + ee.getMessage() +   
                                            "\r\n";   
                                }   
                            }   
                        }   
                    } else {   
                        throw new Exception(folderName + " is not a folder'name!");   
                    }   
                } catch (Exception e) {   
                    throw new Exception(e.getMessage());   
                }   
            } else {   
                throw new Exception("you didnot login remote ftp server!");   
            }   
        } 
    /**
         * 上传指定文件夹下的所有文件到FTP指定目录下
         * @param folderName 本地要上传的文件夹全路径
         * @param ftpPath FTP上对于根目录的路径
         * @throws IOException
        */    
        public void uploadAllFilesInFolder(String folderName, String ftpPath) throws
                Exception {
            if (isLogin) {
                String strMsg = "";
                try {
                    File file = new File(folderName);
                    if (file.isDirectory()) {
                        ftpClient.chdir("\\");
                        ftpClient.setType(FTPTransferType.BINARY);
                        if (checkFolderIsExist(ftpPath)) {
                            ftpClient.chdir(ftpPath);
                        } else {
                            createFolder(ftpPath);
                        }
                        File[] files = file.listFiles();
                        for (int i = 0; i < files.length; i++) {
                            if (files[i].isFile()) {
                                try {
                                    ftpClient.put(files[i].getPath(),
                                                  files[i].getName());
                                } catch (Exception ee) {
                                    strMsg += "upload file<<:" + files[i].getPath() +
                                            ">> error!Message:" + ee.getMessage() +
                                            "\r\n";
                                }
                            }
                        }
                    } else {
                        throw new Exception(folderName + " is not a folder'name!");
                    }
                } catch (Exception e) {
                    throw new Exception(e.getMessage());
                }
            } else {
                throw new Exception("you didnot login remote ftp server!");
            }
        }


    3、实现上传单个文件函数

    view plaincopy to clipboardprint?
    /** 
         * 上传单个文件 uploadFile(String clientFileName, String ftpPath) 
         * @param clientFileName 本地要上传的文件的全路径 
         * @param ftpPath FTP上对于根目录的路径 
         * @throws IOException 
        */ 
        public void uploadFile(String clientFileName, String ftpPath) throws 
                Exception {   
            if (isLogin) {   
                try {   
                    //获取文件名   
                    String filename = "";   
                    int index = clientFileName.lastIndexOf("\\");   
                    filename = clientFileName.substring(index + 1);   
                    ftpClient.chdir("\\");   
                    ftpClient.setType(FTPTransferType.BINARY);   
                    if (checkFolderIsExist(ftpPath)) {   
                        ftpClient.chdir(ftpPath);   
                    } else {   
                        createFolder(ftpPath);   
                    }   
                    ftpClient.put(clientFileName, filename);   
                } catch (Exception ex) {   
                    throw new Exception(ex.getMessage());   
                }   
            } else {   
                throw new Exception("you didnot login remote ftp server!");   
            }   
        } 
    /**
         * 上传单个文件 uploadFile(String clientFileName, String ftpPath)
         * @param clientFileName 本地要上传的文件的全路径
         * @param ftpPath FTP上对于根目录的路径
         * @throws IOException
        */
        public void uploadFile(String clientFileName, String ftpPath) throws
                Exception {
            if (isLogin) {
                try {
                    //获取文件名
                    String filename = "";
                    int index = clientFileName.lastIndexOf("\\");
                    filename = clientFileName.substring(index + 1);
                    ftpClient.chdir("\\");
                    ftpClient.setType(FTPTransferType.BINARY);
                    if (checkFolderIsExist(ftpPath)) {
                        ftpClient.chdir(ftpPath);
                    } else {
                        createFolder(ftpPath);
                    }
                    ftpClient.put(clientFileName, filename);
                } catch (Exception ex) {
                    throw new Exception(ex.getMessage());
                }
            } else {
                throw new Exception("you didnot login remote ftp server!");
            }
        }

  • 相关阅读:
    vue-router路由
    前端路由与后端路由
    getsupportfragmentmanager 没有这个方法
    Glide使用
    Android使用Glide加载Gif.解决Glide加载Gif非常慢问题
    电脑卡,eclipse Android stadio 卡,什么都卡解决方法
    Service IntentService区别 (面试)
    枚举
    Android stadio litepal
    Android 单元测试
  • 原文地址:https://www.cnblogs.com/cotty/p/1798321.html
Copyright © 2020-2023  润新知