欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-14 12:14:52
...

最近在项目中使用了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部署必须开被动模式。第二个是开被动模式必须在连接登录后才能开启,在连接登录之前开启是不起作用的。我一开始就是将被动模式的开启放在了前面,结果上传失败。放在了连接登录后正常运行