docker部署应用无法通过FTP上传文件

2 篇文章 0 订阅
1 篇文章 0 订阅

最近在项目中使用了FTP这个协议去做了文件传输的功能,在本地测试也是通过的,完全没有问题。但是昨天用去用docker部署的时候发生了奇怪的现象,当请求过去的时候,ftp服务器能够连接,文件夹也能够创建,但是就是上传怎么也上传不上去,也没有抛异常。一时间很疑惑。
去查看了很多博客,都说的是要启动被动模式。

    @Bean
    @Scope("prototype")
    public FTPClient getFTPClient(){
        FTPClient  ftpClient = new FTPClient();
        ftpClient.setConnectTimeout(1000*5);
        try {
            ftpClient.connect(url,port);
            ftpClient.login(username,password);
            ftpClient.setControlEncoding("utf-8");
            ftpClient.setFileType(FTP.BINARY_FILE_TYPE);//设置文件传输模式为二进制,可以保证传输的内容不会被改变
            //设置被动模式
            ftpClient.enterLocalPassiveMode();
            int replyCode = ftpClient.getReplyCode();
            if (!FTPReply.isPositiveCompletion(replyCode)){
                log.warn("连接ftp服务器失败!ftp服务器地址:" + url
                        + ", 端口:" + port + ", 初始化工作目录:" + remotedir);
                ftpClient.disconnect();
            }
        } catch (IOException e) {
            log.error("连接ftp服务器发生异常!ftp服务器地址:" + url
                    + ", 端口:" + port + ", 初始化工作目录:" + remotedir + "\n异常信息: " + e.getMessage());
        }
        return ftpClient;

最后在添加了被动模式后,重新打包,docker重新部署上传文件成功了。
强调两个点,一个是docker部署必须开被动模式。第二个是开被动模式必须在连接登录后才能开启,在连接登录之前开启是不起作用的。我一开始就是将被动模式的开启放在了前面,结果上传失败。放在了连接登录后正常运行

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值