2017-09-05 44 views
0

我试图检索使用骆驼FTP组件文件(骆驼2.19.0):Apache的骆驼FTP越来越无法检索文件:参数】remotefile错误

from("ftp://my.host.com:21/my/relative/directory?download=true&stepwise=false&delete=false") 

骆驼是连接和正确的目录列表中的文件,但是当它去处理它们,它会因每个文件以下异常:

org.apache.camel.component.file.GenericFileOperationFailedException: Cannot retrieve file: RemoteFile[my/relative/directory/file1.txt] from: ftp://my.host.com:21/my/relative/directory?delete=false&download=true&stepwise=false 
    at org.apache.camel.component.file.GenericFileConsumer.processExchange(GenericFileConsumer.java:427) 
    at org.apache.camel.component.file.remote.RemoteFileConsumer.processExchange(RemoteFileConsumer.java:137) 
    at org.apache.camel.component.file.GenericFileConsumer.processBatch(GenericFileConsumer.java:218) 
    at org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:182) 
    at org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:174) 
    at org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:101) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:748) 

从跟踪日志,我可以看到骆驼是正确列出该目录中的文件:

[TRACE] 2017-09-05 11:40:49,438 org.apache.camel.component.file.remote.FtpConsumer - Polling directory: my/relative/directory 
[TRACE] 2017-09-05 11:40:51,748 org.apache.camel.component.file.remote.FtpOperations - listFiles(my/relative/directory) 
[TRACE] 2017-09-05 11:40:58,657 org.apache.camel.component.file.remote.FtpConsumer - Found 3 in directory: my/relative/directory 
[TRACE] 2017-09-05 11:40:58,657 org.apache.camel.component.file.remote.FtpConsumer - FtpFile[name=/absolute/path/to/directory/file1.txt, dir=false, file=true] 
[TRACE] 2017-09-05 11:40:58,657 org.apache.camel.component.file.remote.FtpConsumer - FtpFile[name=/absolute/path/to/directory/file2.txt, dir=false, file=true] 
[TRACE] 2017-09-05 11:40:58,657 org.apache.camel.component.file.remote.FtpConsumer - FtpFile[name=/absolute/path/to/directory/file3.txt, dir=false, file=true] 

当骆驼试图然而来处理每个文件,这似乎是前面加上相对目录到绝对目录和没有找到所得到的乱码路径:

[TRACE] 2017-09-05 11:40:59,417 org.apache.camel.component.file.remote.FtpConsumer - Processing file: RemoteFile[absolute/path/to/directory/file1.txt] 
[TRACE] 2017-09-05 11:40:59,418 org.apache.camel.component.file.remote.FtpConsumer - Retrieving file: my/relative/directory//absolute/path/to/directory/file1.txt from: ftp://my.host.com:21/my/relative/directory?delete=false&download=true&stepwise=false 
[TRACE] 2017-09-05 11:40:59,418 org.apache.camel.component.file.remote.FtpOperations - retrieveFile(my/relative/directory//absolute/path/to/directory/file1.txt) 
[TRACE] 2017-09-05 11:40:59,418 org.apache.camel.component.file.remote.FtpOperations - Client retrieveFile: my/relative/directory//absolute/path/to/directory/file1.txt 
[WARN ] 2017-09-05 11:40:59,518 org.apache.camel.component.file.remote.FtpConsumer - Error processing file RemoteFile[absolute/path/to/directory/file1.txt] due to Cannot retrieve file: RemoteFile[absolute/path/to/directory/file1.txt] from: ftp://my.host.com:21/my/relative/directory?delete=false&download=true&stepwise=false 

由FTPComponent构成该路径在日志中不正确:

检索文件: 我/相对/目录//绝对/路径/到/目录/ FILE1.TXT

我调试的骆驼FTP消费者,它看起来像on line 238 is where the relative path is getting prepended to the absolute path

有趣的是,the SFTP component is doing the same thing但它是工作,因为RemoteFileOperations<ChannelSftp.LsEntry>不设置文件名作为绝对路径,但RemoteFileOperations<FTPFile>一样。

有没有人有任何建议来解决这个问题,让FTP Conponent消耗这些文件?还是我做错了什么?

我用骆驼2.19.0

回答

0

默认情况下,骆驼将转到\首页{用户名} \目录。
如果您的文件保存在相对路径下,则只需将目录路径设置为\ abc-any-path \ file.txt
如果您的文件保存在\ home {用户名} \以外的任何路径中,那么你需要给
\ .. \ .. \ abc-any-absolute-path \ file.txt

骆驼不允许你直接输入绝对路径。希望这可以帮助!

+0

嗨,对不起,这不能解决我的问题。问题不在于相对或绝对路径是否工作 - 与Camel FTP组件无关(但SFTP确实可行)。 –