0

我对骆驼 apache 有疑问。我的 csv 文件中有 LF 和 CRLF。LF 存在于我的 csv 文件的值中。当骆驼从 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();

带有 lf 值的 csv

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

4

1 回答 1

1

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

IE

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

它是如何工作的?

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

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

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

于 2021-04-23T01:25:56.303 回答