关于FTP未设置工作模式导致无法读取到文件问题

问题描述

连接上FTP服务器之后,从指定文件夹读取文件,在本地测试的时候可以正常读取,但是打包到测试执行之后就无法正常读取。

本地测试的时候的FTP服务器的配置与线上的配置一样(IP、端口、用户名、密码),这些都是一样的,连测试的时候读取的文件也是一样的。在对同一个文件夹下的文件进行读取时,本地获取到这个文件夹下文件数是65,但是在测试环境读取到却是0。

代码大概是这样的:

public void downFile(String ftpHost, int port, String username, String password,
                                          String remotePath) {

    FTPClient ftp = new FTPClient();
    try {
        ftp.connect(ftpHost, port);
        ftp.login(username, password); // 登录
        
        if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
            ftp.disconnect();
            throw new RuntimeException("下载文件失败!");
        }
        
        ftp.enterLocalPassiveMode(); // 被动模式

        ftp.changeWorkingDirectory(remotePath); // 转移到FTP服务器目录
        FTPFile[] fs = ftp.listFiles();

        log.info("读取文件数量:" + fs.length);

        // 以下代码省略
}

原因与解决方式

在进行多方面排查之后都没有发现问题,直到最后想起来会不会和FTP的主动模式和被动模式有关的时候,找到了问题。

我配置的FTP服务器是被动模式,FTPClient默认使用主动模式连接,我最开始是没有设置ftp.enterLocalPassiveMode(); // 被动模式的。

之所以没有设置被动模式连接,是因为之前在其他地方测试过,如果FTP服务器是主动模式,在连接的时候没有指定主动模式连接就会超时,但是如果FTP服务器是被动模式,在连接的时候就可以不指定连接模式。所以不知道是怎么回事。

总之,连接FTP的时候最好显式指定工作模式,无论是主动模式还是被动模式,如果遇到FTP服务器相关问题可以尝试设置连接模式来解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值