【发布时间】:2017-03-27 06:37:15
【问题描述】:
我正在使用 Apache Camel 下载 FTP 文件。
有没有办法获取下载进度?标头公开了总文件大小,但据我所知,我无权访问下载字节流。如果我这样做了,我可以手动计算字节数,然后将其除以总数以获得百分比。
【问题讨论】:
标签: scala apache-camel akka
我正在使用 Apache Camel 下载 FTP 文件。
有没有办法获取下载进度?标头公开了总文件大小,但据我所知,我无权访问下载字节流。如果我这样做了,我可以手动计算字节数,然后将其除以总数以获得百分比。
【问题讨论】:
标签: scala apache-camel akka
我不认为这可以通过 Camel 开箱即用地完成,因为默认文件组件不会公开此级别的详细信息。不过我相信你可以扩展现有的 FTP 组件来相对轻松地做你想做的事。
我假设您有一个由 FTP 源触发的流。 Apache Camel FTP 组件(“File2”的一部分)仅在文件完全下载后才会发出事件。 FTP 组件使用 Apache Commons FTP 客户端(请参阅FtpOperations.java)。我将首先创建我自己的从 Camel 派生的 FTP 组件,该组件添加了一种提供 Camel 端点的方法,以便使用这种方法described elsewhere on StackOverflow 定期通知进度。您的新组件可能需要一个额外的参数来告诉它在哪里发送正在进行的通知,例如:
<from uri="ftp://remote.site/directory/*.csv?progressNotifications=seda:ftp-progress-messages"/>
您可以定义自己的消息格式,并让 FtpOperations 和朋友将您可能感兴趣的任何事件发送到该频道 - 例如。下载开始、特定频率/里程碑的进度事件、下载结束、下载错误等。
整个“FTP”源组件在FtpComponent.java 中定义。这负责根据给定 FTP 源(或目标,视情况而定)的 Camel URI 编排所有其他部分。
【讨论】: