You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Apache Camel从FTP服务器下载CSV文件?

解决Apache Camel FTP下载CSV时的类型转换错误

问题分析

你遇到的No type converter available to convert from type: java.lang.Integer to the required type: java.io.InputStream with value -1错误,根源主要有两个:

  1. 路由定义违规:你的代码里连续写了两个from(),这不符合Apache Camel的路由规则。from()是用来定义路由起始端点的,一个路由只能有一个起始点,连续两个from()会打乱Camel的消息流处理逻辑,最终触发类型转换异常。
  2. FTP文件读取异常:错误中的-1通常是FTP组件读取文件时返回的异常信号,可能意味着目标文件不存在、FTP账号权限不足,或者FTP连接模式(比如需要被动模式)配置不正确。

修复后的方案1代码

根据你“下载指定CSV到本地”的需求,提供两种正确的写法:

写法1:通过Direct端点触发下载

如果你需要外部触发(比如调用direct://start)来执行下载操作,应该用pollEnrich来整合FTP端点:

from("direct://start")
    // 从FTP拉取指定文件,添加被动模式适配多数服务器
    .pollEnrich("ftp://user@ftpserver/Directory?password=secret&fileName=a-b-c-2018-04-16.csv&passiveMode=true")
    // 保存到本地目录
    .to("file://dir");

写法2:FTP自动轮询下载

如果不需要外部触发,希望Camel自动监听FTP目录并下载指定文件,可以直接把FTP作为路由起始点:

from("ftp://user@ftpserver/Directory?password=secret&fileName=a-b-c-2018-04-16.csv&passiveMode=true")
    .to("file://dir");

额外排查建议

  • 验证文件与权限:确认FTP服务器上Directory目录下确实存在a-b-c-2018-04-16.csv,且你的FTP账号拥有该文件的读取权限。
  • 强制被动模式:大多数现代FTP服务器需要被动模式才能正常传输文件,建议始终添加passiveMode=true参数。
  • 开启DEBUG日志:打开Camel的DEBUG级别日志,能看到FTP组件与服务器的交互细节,更容易定位连接、登录或文件读取阶段的问题。

如果你的方案2也遇到了问题,可以补充具体代码和错误信息,我再帮你分析。

内容的提问来源于stack exchange,提问作者Tanmay Grover

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:47:08