linux FTP 下载空文件问题,openoffice PDF转换失败

本人菜鸟,这个问题排查了三天, 做下记录

这边需求是做一个归档操作,细节就不说了,大体就是到某个节点,将文件传到FTP上,然后定时从FTP上获取已经办结完的文件, 下载到某一个节点的服务器上  转成PDF。完成一系列的归档操作

现场出现这么个问题:环境是分布式部署,FTP和服务器均是linux,down文件时,文件均为空

首先是PDF。因为PDF不涉及与FTP的交互,是本地文件进行转换处理,首先是报了jacob.jar调用失败,经过上网搜索,发现jacob.jar只能应用于windows环境,后来换成了openoffice服务,结果一问现场,发现现场人家之前旧归档用的就是openoffice

囧。

html转PDF这边报了Can't connect to X11 window server服务的问题,我们公司的中间件是基于jetty封装的,因此我们这边需要在jetty 启动文件引用的变量中填写-Djava.awt.headless=true,问题就解决了。虽然短短几行,但是也解决了好久,留着以后看

o(╥﹏╥)o

 

通过排查发现,这边是在某一个固定节点进行了套红的处理,并且根据中文名比对,我看了下现场的流程,并没有交套红的节点,让其修改,本以为就可以了,但是,事事哪有那么简单

ftp down下的文件为空文件,路径没有问题,代码方面这边有两个位置进行了ftp下载的操作,我让现场先办理到第一个节点的位置,看一下文件,文件是正常的,到了第二个节点,就出现了问题,因此问题锁定到了第二个节点,但是发现代码没有任何问题

粘出代码供大家研究

private void ftpConfigInit() throws Exception {
        ConfigXMLReader cmr = new ConfigXMLReader();

        String server = cmr.getAttribute("FtpServer", "server");
        int port = Integer.valueOf(cmr.getAttribute("FtpServer", "port"));
        String user = cmr.getAttribute("FtpServer", "user");
        String password = cmr.getAttribute("FtpServer", "password");

        // 系统密码默认加入此字符串

        password = password + "whir?!";

        int reply;

        ftpClient = new FTPClient();

        ftpClient.connect(server, port);
        // 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
        ftpClient.login(user, password);// 登录
        reply = ftpClient.getReplyCode();
        if (!FTPReply.isPositiveCompletion(reply)) {
            ftpClient.disconnect();
            logger.error("ftp连接失败!");
        }

    }
    private void processFtpFile(String fileName, String remotePath,
            String newFilePath) throws Exception {
        logger.error("进行FTP生成正式文件");
        OutputStream is = null;
        try {
        if (ftpClient == null || !ftpClient.isConnected()) {
            ftpConfigInit();
        }
        if (ftpClient != null && ftpClient.isConnected()) {

            ftpClient.changeWorkingDirectory(remotePath);// 转移到FTP服务器目录
            ftpClient.enterLocalPassiveMode();
            FTPFile[] fs = ftpClient.listFiles();
            for (FTPFile ff : fs) {
                logger.error("ff.getName:"+ff.getName());
                logger.error("fileName:"+fileName);
                if (ff.getName().equals(fileName)) {
                    File localFile = new File(newFilePath);
                    if (!localFile.getParentFile().exists()
                            || !localFile.getParentFile().isDirectory()) {
                        localFile.getParentFile().mkdirs();
                    }
                    if (!localFile.exists()) {
                        localFile.createNewFile();
                    }
                    is = new FileOutputStream(localFile);
                    logger.error("ftp上传文件"+ff.getName());
                    ftpClient.retrieveFile(ff.getName(), is);
                    is.close();
                    break;
                    }
                }
                ftpClient.logout();
            }

        } catch (IOException e) {
            e.printStackTrace();

            if (this.ftpClient.isConnected())
                try {
                    this.ftpClient.disconnect();
                } catch (IOException localIOException1) {
                }
            if (is != null)
                try {
                    is.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
        } finally {
            if (this.ftpClient.isConnected())
                try {
                    this.ftpClient.disconnect();
                } catch (IOException localIOException2) {
                }
            if (is != null)
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }
    }

排查许久,上网找资料。后来比对了可以正常下载ftp文件的代码,发现,是少了两行

 ftpClient.setControlEncoding("UTF-8");
        ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);

添加上去以后,就可以正常下载到本地了。所以我想知道down不下来的具体原因,请大牛指教

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值