我试图发送一个文件到第三方ftp服务器(由亚马逊托管它会出现)与骆驼FTP生产者,我有一个问题,我得到写入文件失败:文件操作失败…主机尝试数据连接x. x.x.x是不一样的服务器y.y.y.y
这是我以前没有见过的。
生产者被配置为处于被动模式,根据TRACE级别的日志,这是启用的。(尽管错误消息听起来更像是与主动模式问题有关)
y. y.y.y
IP地址是nslookup为目标域列出的地址之一,因此这一点是有意义的。然而,x.x.x.x
IP与不同的亚马逊托管服务器相关,因此我假设已经执行了某种移交或负载平衡,FTP客户端不喜欢这样。
是否有某种方式配置骆驼FTP以允许此操作(我假设这是一个安全功能),或者被动模式是否应该允许此操作?
我对ftp服务器提供程序没有影响,所以不幸的是,除了我的客户端选项之外,我无法更改任何内容。
感谢寻找!
经过一番挖掘,并对Apache CommonsFTP的源代码进行了grep处理,所讨论的消息是由客户端中的验证引起的,该验证检查被动模式连接与初始服务器连接相同。
鉴于这似乎是一个负载平衡的系统,被动模式数据连接与目标IPIP不同,因此无法通过验证。
可以使用CamelFTP通过创建FTPClient的特定实例并设置删除验证关闭来修复它。
FTPClient ftp = new FTPClient();
ftp.setRemoteVerificationEnabled(false);
registry.put("FTPClient", ftp);
然后在URI中引用这个对象进行FTP
ftp://user@host:21/path?password=xxxx&passiveMode=true&tempPrefix=part.&ftpClient=#FTPClient
显然,通过禁用此远程验证测试,您会使自己更容易受到FTP数据被重定向或拦截以及您的数据被发送到您不打算的地方的影响,但我想如果您担心您不会使用仍然首先使用未加密的FTP。