【问题记录】【FTP对接问题】FTP 连接不上或者连接很慢以及 FTP 读取目录、下载文件都为空问题
1 问题现象
今天对接 FTP,过程中发现的两个大问题让我纳闷半天,这是 FTP 上的文件,大致的业务流程就是: 从 FTP 上拉取资料,然后格式转换并解析成业务对象,然后保存或者更新进中台。
那么我们首要做的就是从 FTP 上拉文件下来 是不是。
涉及到的 maven 依赖:
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.6</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.18</version>
</dependency>
pendencies>
主要就是 hutool + commons-net里的 FTPClient 实现的哈。
过程中两个最大的问题点:
(1)连接的时候,发现一直连不上,或者四到五分钟才连上
(2)本地调试能下载文件并且能遍历某个目录下的文件,但是部署到线上目录空白、文件也下载不下来
2 解决办法
(1)针对第一个问题,纳闷的很,主要是因为我连接的时候字符编码= =设置错了:
代码比较多,我这里就简单示例下我之前写的:
public static void main(String[] args) { Ftp ftp = new Ftp("192.168.128.176", 21, "xxx", "xxxxx", StandardCharsets.UTF_16LE); System.out.println(ftp); }
就这么一行代码,然后你运行就会发现它一直卡在第一行,然后几分钟后报个错啥的,当我把字符集换成 StandardCharsets.UTF_8 直接秒连接。
具体为什么,我就没细究了。
(2)针对第二个问题,百度搜了搜:
public static void main(String[] args) { Ftp ftp = new Ftp("192.168.128.176", 21, "xxx", "xxxx", StandardCharsets.UTF_8); ftp.getClient().enterLocalPassiveMode(); System.out.println(ftp); }
这个方法的意思就是每次数据连接之前,ftp client告诉ftp server开通一个端口来传输数据。为什么要这样做呢,因为ftp server可能每次开启不同的端口来传输数据,但是在linux上或者其他服务器上面,由于安全限制,可能某些端口没有开启,所以就出现阻塞。
感谢铁子:https://www.cnblogs.com/hisunhyx/p/5029476.html?utm_source=tuicool&utm_medium=referral
最后的效果:
好啦,有理解不对的地方欢迎指正哈。