骆驼阿帕奇 FTP 失去 LF

Camel Apache FTP Looses LF

我对骆驼 Apache 有疑问。我的 csv 文件中有 LF 和 CRLF。 LF 存在于我的 csv 文件的值中。 当 camel 从 ftp 获取我的文件并将其放在我的桌面上时,LF 不再存在。但是我需要 LF 字符来正确格式化我的 csv 并将其与 bindy 组件一起使用。

  from("timer://products?fixedRate=true&period="+ TimeUnit.SECONDS.toMillis(30))
            .pollEnrich()
            .simple("ftp://"+ftpUsername+"@"+ftpServer+"?password="+ftpPassword+"&passiveMode=true&stepwise=true&delay=1000&delete=true&include=.*sensopur_product\.csv$")
            .process(exchange -> {
                System.out.println(exchange.getIn().getBody());
                String value = exchange.getIn().getHeader("CamelFileName").toString();
                if (value != null && !value.equals("")){
                    exchange.getIn().setHeader("nomFichier",value);
                }else {
                    exchange.getIn().setHeader("nomFichier","pas de fichier");
                }
                exchange.getIn().setBody(exchange.getIn().getBody(String.class));

            })
            .setHeader("nomFichier", simple("${in.header.CamelFileName}"))

            .to("file://../sensopur/src/main/resources/static")
           .end();

当 camel apache 在 FTP 服务器上获取我的文件时,我该如何保持 LF? 谢谢

在 ftp 消费者行中添加 binary=true。这将停止 ftp 消费者从服务器收集文件时转换结束符。

.simple("ftp://"+ftpUsername+"@"+ftpServer+"?password="+ftpPassword+"&passiveMode=true&binary=true&stepwise=true&delay=1000&delete=true&include=.*sensopur_product\.csv$")

它是如何工作的?

选项binary 是在FTP 协议的binary/ASCII 模式之间切换的选项。默认情况下,camel 将使用 ASCII 模式 (binary=false)。

在FTP协议的ASCII模式下,FTP客户端假设跨OS类型时转换文件的结束符。例如,当文件从非 Unix 系统移动到 Unix 系统时,结束符将变为 LF

在FTP协议的二进制模式下,FTP客户端假设转换任何结束行字符。