FTPSClient解决无法获取文件问题(listFiles为空)

您所在的位置:网站首页 pkgj057无法获取列表 FTPSClient解决无法获取文件问题(listFiles为空)

FTPSClient解决无法获取文件问题(listFiles为空)

2024-07-05 13:47| 来源: 网络整理| 查看: 265

前言

最近需要去第三方拉取数据报告,某个邮件的第三方采用的是ftp存取csv文件,故项目中需要使用ftp,但遇到了一些坑,特此记录一下

环境 commons-net commons-net 3.6 问题 无法正确连接问题

最开始,使用如下获取连接

FTPClient ftpClient = new FTPSClient(); // 连接FTP服务器 ftpClient.connect(ftpHost, ftpPort); // 登陆FTP服务器 ftpClient.login(ftpUserName, ftpPassword); ftpClient.type(FTP.BINARY_FILE_TYPE); if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) { logger.error("未连接到FTP,用户名或密码错误。"); ftpClient.disconnect(); } else { logger.info("FTP连接成功。"); }

但每次到了 FTPReply.isPositiveCompletion(ftpClient.getReplyCode()) 这一步时,总是连接失败。后来才观察到,我需要连接的是一个ftps服务器, 故以上代码需要更改为如下:

FTPSClient ftpClient = new FTPSClient(); // 连接FTP服务器 ftpClient.connect(ftpHost, ftpPort); // 登陆FTP服务器 ftpClient.login(ftpUserName, ftpPassword); ftpClient.type(FTP.BINARY_FILE_TYPE); if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) { logger.error("未连接到FTP,用户名或密码错误。"); ftpClient.disconnect(); } else { logger.info("FTP连接成功。"); }

FTP/FTPS/SFTP区别

无法正确获取文件问题

解决了上述问题后,终于能够正常连接,但在获取文件的时候,每次都是获取的null,然后试探性的调用了一下ftpClient.listFiles()结果是个空数组 [外链图片转存失败(img-Jt1klP9M-1568796327259)(CF7EFB75235C45CBA7E8CA8E56EB4394)] 而且根本无法点开 首先查到说是ftp主动被动模式有关,然后我在连接上加了一句 ftpClient.enterLocalPassiveMode(); 改成了被动模式,但是仍然不生效,后面在stackoverflow上看到了一个同样的问题,提示需要加上这一段

ftpClient.execPBSZ(0); ftpClient.execPROT("P"); ftpClient.type(FTP.BINARY_FILE_TYPE);

问题完美解决,原因暂时没去深究。希望有大佬来解答一下。 有遇到同样问题的小伙伴可以使用试试看

代码

完整获取ftpsClient的方法

/** * 获取FTPClient对象 * @param ftpHost FTP主机服务器 * @param ftpPassword FTP 登录密码 * @param ftpUserName FTP登录用户名 * @param ftpPort FTP端口 默认为21 * @return */ public static FTPSClient getFTPClient(String ftpHost, String ftpUserName, String ftpPassword, int ftpPort) { try { FTPSClient ftpClient = new FTPSClient(); // 连接FTP服务器 ftpClient.connect(ftpHost, ftpPort); ftpClient.enterLocalPassiveMode(); // 登陆FTP服务器 ftpClient.login(ftpUserName, ftpPassword); ftpClient.execPBSZ(0); ftpClient.execPROT("P"); ftpClient.type(FTP.BINARY_FILE_TYPE); if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) { System.err.println("未连接到FTP,用户名或密码错误。"); ftpClient.disconnect(); } else { logger.info("FTP连接成功。"); } return ftpClient; } catch (SocketException e) { System.out.println("FTP的IP地址可能错误,请正确配置。"); } catch (IOException e) { System.err.println("FTP的端口错误,请正确配置。"); } return null; }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3