模拟登录并连接Ftp文件服务器并下载文件

该博客详细介绍了如何通过Java实现FTP文件服务器的连接、切换目录、下载文件的完整流程。首先,通过指定的IP地址、端口号、用户名和密码建立FTP连接,并检查连接是否成功。接着,在指定的目录下下载所有文件,使用GBK编码处理文件名以防止乱码,文件以二进制模式下载并保存到本地。最后,提供了Controller接口供Postman测试下载操作。
摘要由CSDN通过智能技术生成

模拟登录并连接Ftp文件服务器并下载文件

1、连接ftp文件服务器

 // 连接ftp文件服务器
    public static FTPClient getFtp() {
        String url = "10.20.1.110";//ip地址
        String username = "user";//用户名
        String password = "password";//密码
        int port = 110;//端口号
        FTPClient ftpClient = null;
        try {
            ftpClient = new FTPClient();
            ftpClient.connect(url,port);
            ftpClient.login(username, password);
            if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
                return null;
            }
        } catch (Exception e) {
            logger.error("FTP错误,请正确配置", e);
            throw new SpcException("FTP错误,请正确配置");
        }
        return ftpClient;
    }

2、下载文件

// 下载ftp文件
    public static void downloadFtpFile(String localhostPath) throws IOException {
        FTPClient ftpClient = getFtp();
        if (ftpClient == null) {
            throw new SpcException("FTP连接失败!");
        }
        try {
            // 中文支持 可以是UTF-8 需要根据文件服务器的字符集编码自己试一试
            ftpClient.setControlEncoding("GBK");
            // 文件类型为二进制文件
            ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
            // ftp client告诉ftp server开通一个端口来传输数据
            ftpClient.enterLocalPassiveMode();
            // 进入服务器指定下载目录 
            String ftpPath = "SPC_HANDBOOK";

            boolean isDiretory = ftpClient.changeWorkingDirectory(ftpPath);
            if (!isDiretory) {
                throw new SpcException("SPC_HANDBOOK文件目录不存在!");
            }
            //获取指定目录下面的所有文件
            FTPFile[] list = ftpClient.listFiles();
            String[] fileNameList = new String[list.length];
            if(list.length>0){
              for (int i=0;i<list.length;i++){
                    fileNameList[i]=list[i].getName();
                }
            }
            // 获取文件下载后存储的地址
            //String localhostPath = "C:\\Users\\Administrator\\Desktop";
            File dir = new File(localhostPath);
            if (!dir.exists()) {
                dir.mkdirs();
            }
            for (FTPFile ftpFile : list) {
                // 创建本地文件的输出流:声明下载后的本地路径和文件名 File.separator代表系统默认文件目录分隔符
                File localFile = new File(localhostPath +
                        File.separatorChar +ftpFile.getName());
                // 创建本地文件
                if (!localFile.exists()) {
                    localFile.createNewFile();
                }
                try (OutputStream os = new FileOutputStream(localFile)) {
                    //处理文件乱码
                    String localFileName = new String(ftpFile.getName().getBytes("GBK"),
                            "ISO-8859-1");
                    ftpClient.retrieveFile(localFileName, os);
                } catch (Exception e) {
                    logger.info("文件下载失败:"+ftpFile.getName());
                }
            }
        } catch (Exception e) {
            logger.error("异常", e);
        } finally {
            ftpClient.logout();
            ftpClient.disconnect();
        }

    }

3、编写Controller postman进行测试

//打印日志使用
private static final Logger logger = LoggerFactory.getLogger(OperationManualDownloadController.class);

    @ApiOperation(value = "操作手册下载Api")
    @PostMapping("/download")
    public String download(){
        try {
            //获取当前桌面地址 使文件都下载到桌面
            FileSystemView fsv = FileSystemView.getFileSystemView();
            String localhostPath = String.valueOf(fsv.getHomeDirectory());
            logger.info("操作手册下载开始,文件存储地址为:"+localhostPath);
            downloadFtpFile(localhostPath);
        } catch (IOException e) {
            logger.info("下载操作手册错误!");
            e.printStackTrace();
        }
        logger.info("文件下载结束");
        return "下载成功";
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
思科设备可以模拟FTP服务器,但这需要使用专门的模拟器软件,如GNS3或Packet Tracer。以下是在Packet Tracer中模拟FTP服务器的步骤: 1. 在Packet Tracer中创建一个空白网络拓扑。 2. 添加一台Cisco设备,例如Cisco 1941路由器。 3. 配置路由器的基本设置,例如IP地址和默认网关。 4. 在路由器上创建一个FTP服务器,使用以下命令: ``` ip ftp username <username> ip ftp password <password> ip ftp source-interface <interface> ``` 其中,`<username>`和`<password>`是FTP服务器登录的用户名和密码,`<interface>`是FTP服务器使用的接口。 5. 在路由器上配置FTP服务器文件目录,使用以下命令: ``` ip ftp username <username> ip ftp password <password> ip ftp source-interface <interface> ``` 其中,`<directory>`是FTP服务器文件目录。 6. 在路由器上配置FTP服务器文件目录,使用以下命令: ``` ip ftp username <username> ip ftp password <password> ip ftp source-interface <interface> ``` 其中,`<directory>`是FTP服务器文件目录。 7. 在路由器上配置FTP服务器文件目录,使用以下命令: ``` ip ftp username <username> ip ftp password <password> ip ftp source-interface <interface> ``` 其中,`<directory>`是FTP服务器文件目录。 8. 在路由器上配置FTP服务器文件目录,使用以下命令: ``` ip ftp username <username> ip ftp password <password> ip ftp source-interface <interface> ``` 其中,`<directory>`是FTP服务器文件目录。 9. 在路由器上配置FTP服务器文件目录,使用以下命令: ``` ip ftp username <username> ip ftp password <password> ip ftp source-interface <interface> ``` 其中,`<directory>`是FTP服务器文件目录。 10. 在路由器上配置FTP服务器文件目录,使用以下命令: ``` ip ftp username <username> ip ftp password <password> ip ftp source-interface <interface> ``` 其中,`<directory>`是FTP服务器文件目录。 11. 在路由器上配置FTP服务器文件目录,使用以下命令: ``` ip ftp username <username> ip ftp password <password> ip ftp source-interface <interface> ``` 其中,`<directory>`是FTP服务器文件目录。 12. 在路由器上配置FTP服务器文件目录,使用以下命令: ``` ip ftp username <username> ip ftp password <password> ip ftp source-interface <interface> ``` 其中,`<directory>`是FTP服务器文件目录。 13. 在路由器上配置FTP服务器文件目录,使用以下命令: ``` ip ftp username <username> ip ftp password <password> ip ftp source-interface <interface> ``` 其中,`<directory>`是FTP服务器文件目录。 14. 在路由器上配置FTP服务器文件目录,使用以下命令: ``` ip ftp username <username> ip ftp password <password> ip ftp source-interface <interface> ``` 其中,`<directory>`是FTP服务器文件目录。 15. 在FTP客户端上连接到路由器的FTP服务器,使用路由器的IP地址作为FTP服务器的地址,并使用配置的用户名和密码进行登录。 以上是在Packet Tracer中模拟FTP服务器的步骤。注意,这只是一个简单的例子,实际的FTP服务器需要更多的配置和安全性措施。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值