【问题记录】【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

最后的效果:

好啦,有理解不对的地方欢迎指正哈。

posted @ 2024-01-19 16:56  酷酷-  阅读(145)  评论(0编辑  收藏  举报