简化Ftp上传文件以及下载文件代码

2018-09-25  本文已影响0人  k损

网上看了一些ftp上传代码,感觉还是有点杂,就自己结合后简化了一下,可以根据自己需要扩展。

以下来自不同两个实例:


application.properties 里写ftp地址

ftp.ip=xx.xx.x.xxx

ftp.port=21

ftp.username=hks

ftp.password=123456

ftp.path=/

再写个对象映射属性,get.set就不放了

@ConfigurationProperties(prefix = "ftp")

**public** **class**FtpProperty {

 **private** String ip;

   **private** **int** port;

   **private** String username;

   **private** String password;

   **private** String path;

}

上传文件:

@Autowired

FtpProperty ftpProperty;

**public** **void** exportToFtp(){

          //创建客户端对象

          FTPClientftp = **new** FTPClient();

          InputStreamlocal=**null**;

         String ip=ftpProperty.getIp();

          **int** port=ftpProperty.getPort();

          String username=ftpProperty.getUsername();

          String password=ftpProperty.getPassword();

          String path=ftpProperty.getPath();

          **try** {

              //连接ftp服务器

              ftp.connect(ip, port);

              //登录

              ftp.login(username, password);

              //设置上传路径

              //path="/";

              //检查上传路径是否存在 如果不存在返回false

              **boolean** flag = ftp.changeWorkingDirectory(path);

              **if**(!flag){

                  //创建上传的路径  该方法只能创建一级目录

                  ftp.makeDirectory(path);

              }

              //指定上传路径

              ftp.changeWorkingDirectory(path);

              //指定上传文件的类型  二进制文件

              ftp.setFileType(FTP.***BINARY_FILE_TYPE***);

              //读取本地文件(路径)

              Filefile = **new** File("./data.json");

              local = **new** FileInputStream(file);

              //第一个参数是文件名

              ftp.storeFile(file.getName(), local);

           }**catch** (SocketException e) {

               e.printStackTrace();

           }**catch** (IOException e) {

               e.printStackTrace();

           }**finally** {

               **try** {

                   //关闭文件流

                   local.close();

                   //退出

                   ftp.logout();

                   //断开连接

                   ftp.disconnect();

               }**catch** (IOException e) {

                   e.printStackTrace();

               }

           }

      }

下载:

以下载图片为例

/*

    * 从FTP服务器下载图片

    * 

    * @param ftpHost FTP IP地址

    * 

    * @param ftpUserName FTP 用户名

    * 

    * @param ftpPassword FTP用户名密码

    * 

    * @param ftpPort FTP端口

    * 

    * @param ftpPath FTP服务器中文件所在路径 格式: ftptest/aa

    * 

    * @param fileName 文件名称

    */ 

    public static void downloadFtpPicture(HttpServletResponse response,String ftpHost, String ftpUserName, 

            String ftpPassword, int ftpPort, String ftpPath,String name) { 

        FTPClient ftpClient = null; 

        OutputStream os = null;

        String fileName =name;

        try { 

            ftpClient = getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort); 

            ftpClient.setControlEncoding("GBK"); // 中文支持 

            ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); 

            ftpClient.setRemoteVerificationEnabled(false);

            ftpClient.enterLocalPassiveMode();

            ftpClient.enterLocalPassiveMode(); 

            ftpClient.changeWorkingDirectory(ftpPath);

            os = response.getOutputStream();

            fileName = new String(fileName.getBytes("GBK"),"ISO-8859-1"); //需要与FTP服务器编码格式ISO-8859-1一致才能被识别

            ftpClient.retrieveFile(fileName, os);

            os.close(); 

            ftpClient.logout(); 

            logger.info("下载成功。"); 

        } catch (FileNotFoundException e) { 

            logger.error("没有找到" + ftpPath + "文件"); 

            e.printStackTrace(); 

        } catch (SocketException e) { 

            logger.error("连接FTP失败."); 

            e.printStackTrace(); 

        } catch (IOException e) { 

            e.printStackTrace(); 

            logger.error("文件读取错误。"); 

            e.printStackTrace(); 

        }finally {

            try {

            ftpClient.disconnect();

            } catch (IOException io) {

                io.printStackTrace();

            }

        }

    }
上一篇 下一篇

猜你喜欢

热点阅读