当前位置: 首页 > 知识库问答 >
问题:

如何用camel sftp下载文件

慕宏博
2023-03-14

这是我必须做的:外部服务器定期生成3个文件:“FI.date.nnnnn”、“FS.date.nnnnn”和GO.date.nnnnn”。这三个文件与相同的日期和nnnnn(=序列号)相关联。每个“三元组”都是唯一的名称。当GO文件存在时,我必须下载这些文件。这个GO文件是空的。

我用骆驼这个路线:

from("sftp://user@url:port/OUTTEST-S?binary=true&connectTimeout=3000&delete=true&disconnect=true&include=GO.*&knownHostsFile=.ssh/known_hosts&privateKeyFile=../id_rsa.ppk&stepwise=false&strictHostKeyChecking=no&timeout=3000).bean(afterReceiveGo).to("...")

我使用“include=GO.*”来等待GO文件。

在我的AfterReceiveGo中,我使用了这样的ConsumerTemplate:

consumerTemplate.receiveBody(sftp://user@url:port/OUTTEST-S?binary=true&connectTimeout=3000&delete=true&disconnect=true&fileName=FO.20160810.00089&knownHostsFile=.ssh/known_hosts&privateKeyFile=../id_rsa.ppk&stepwise=false&strictHostKeyChecking=no&timeout=3000&useList=false, File.class)

因为我知道要下载的文件的名称,所以我使用“fileName=" and useList=false”。

但在日志中:

Will try again at next poll. Caused by: [org.apache.camel.component.file.GenericFileOperationFailedException - Cannot list directory: OUTTEST-S]: org.apache.camel.component.file.GenericFileOperationFailedException: Cannot list directory: OUTTEST-S
    at org.apache.camel.component.file.remote.SftpOperations.listFiles(SftpOperations.java:617)
    at org.apache.camel.component.file.remote.SftpConsumer.doPollDirectory(SftpConsumer.java:117)
    at org.apache.camel.component.file.remote.SftpConsumer.pollDirectory(SftpConsumer.java:79)
    at org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:131)
    at org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:175)
    at org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:102)
    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:745)
Caused by: 4: 
    at com.jcraft.jsch.ChannelSftp._stat(ChannelSftp.java:2208)
    at com.jcraft.jsch.ChannelSftp._stat(ChannelSftp.java:2215)
    at com.jcraft.jsch.ChannelSftp.ls(ChannelSftp.java:1565)
    at com.jcraft.jsch.ChannelSftp.ls(ChannelSftp.java:1526)
    at org.apache.camel.component.file.remote.SftpOperations.listFiles(SftpOperations.java:608)
    ... 12 more
Caused by: java.io.IOException: inputstream is closed
    at com.jcraft.jsch.ChannelSftp.fill(ChannelSftp.java:2884)
    at com.jcraft.jsch.ChannelSftp.header(ChannelSftp.java:2908)
    at com.jcraft.jsch.ChannelSftp._stat(ChannelSftp.java:2189)
    ... 16 more

我使用骆驼2.17.2,都是java配置,没有xml文件。

怎么了?有没有另一种(也是最好的)方法来做这件事?

第二个问题:我想在from("sftp ... "中使用cron表达式)每一小时执行一次,即。“我不能用吗?调度器=spring

cronScheduledRoutePolicy.startTime("cron expression");
from("sftp...").routePolicy(cronScheduledRoutePolicy).bean("...").to("...");

但是我在日志文件中每秒看到一个连接。我该怎么办?

共有1个答案

商天逸
2023-03-14

Camel的sftp组件有选项来定义它自己的极化间隔。不需要配置/添加调度程序。这里有两个选项,引用自http://camel.apache.org/file2.htmlsignalDelay:在轮询文件/目录开始之前的毫秒。延迟:在下一次轮询文件/目录之前的毫秒。

 类似资料:
  • 问题内容: 我正在尝试获取下载链接并下载文件。 我有一个包含以下链接的日志文件: 我有这样的代码: 到目前为止,我不知道如何获取下载链接并下载它。可以使用selenium下载文件吗? 问题答案: 根据文档,您应该配置为自动下载具有指定内容类型的文件。这是在txt文件中使用第一个URL的示例,该文件将文件保存在当前目录中: 注意,我也简化了xpath。

  • 我想用php从我的服务器下载文件。我搜索了谷歌,在这里找到了答案。这个答案表明我必须为此编写这些代码。 但我能做到这一点,只需这两行: 那么,我为什么还要像上面的代码那样多写几行呢?

  • 问题内容: 我试图使用Python从Internet下载某些内容,但我使用的是urllib模块,但无法正常工作。我希望能够将下载的文件保存到我选择的位置。如果有人可以用清晰的例子向我解释如何做到这一点,将不胜感激。 问题答案: 我建议像这样使用urllib2: 您甚至可以将其缩短为(尽管,如果您打算将每个单独的调用括在-中,则不想将其缩短):

  • 我正在使用axios处理基本的http请求,如GET和POST,并且运行良好。现在我需要能够下载Excel文件了。axios是否可以实现这一点?如果有,有人有一些示例代码吗?如果没有,我还可以在React应用程序中使用什么来执行相同的操作?

  • 我正在寻找一种在python中下载pdf文件的方法,我看到了关于推荐urllib模块的其他问题的答案。我试图用它下载一个pdf文件,但是当我试图打开下载的文件时,一条消息显示该文件无法打开。 错误消息 这是我使用的代码- 我做错了什么?此外,该文件会自动保存到python文件所在的目录中。如何更改它保存到的位置? 编辑-我再次尝试使用示例pdf的链接,http://unec.edu.az/appl

  • 问题内容: 我刚刚开始学习来自Android的iOS的Apple Swift编程。我现在基本上可以阅读和操作swift代码,还学习了iOS swift编程中使用的一些通用类,但是仍然对语法和所有内容感到困惑。 我正在尝试下载文件。就像,让我们说来自这个网址 在一个按钮中单击。也许也有视觉进步 通过在stackoverflow中搜索,我偶然发现了Alamofire。我可以尝试一下,但是我不确定这是否