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

Apache Camel:在文件传输后获取移动路径

澹台衡
2023-03-14

我正在创建一个文件传输路径,该路径使用移动来设置一个动态路径,在成功传输文件后,文件将在该路径中移动。我还设置了一个通知程序来跟踪文件传输事件。

由于移动路径是动态的,我需要得到文件传输后移动文件的路径。该路径如何在通知程序中显示?

public class MyFtpServiceBuilder extends RouteBuilder {

    @Override
    public void configure() throws Exception {

        getContext()
            .getManagementStrategy()
            .addEventNotifier(new MyFtpServiceNotifier());

        from("file:C:/tmp/inputfolder?move=archive/${date:now:yyyyMMdd}/${file:onlyname}")
            .routeId("myRoute")
            .to("file:C:/tmp/outputfolder")

    }
}

public class MyFtpServiceNotifier extends EventNotifierSupport {

    @Override
    public void notify(EventObject event) throws Exception {
        Exchange exchange = ((AbstractExchangeEvent) event).getExchange();

        if (event instanceof ExchangeSentEvent) {

            // Want to get here the path where file was moved

        }
    }

    @Override
    public boolean isEnabled(EventObject event) {
        return event instanceof AbstractExchangeEvent;
    }
}

共有2个答案

方宏富
2023-03-14

我不知道如何在通知程序中执行此操作,但您始终可以添加处理器并使用FileEndpoint。getMove()。evaluate()方法获取最终移动的文件路径。

例如:

@Override
public void process(final Exchange exchange) throws Exception {

    File movedFile = null;
    if (exchange.getFromEndpoint() instanceof FileEndpoint) {
        FileEndpoint fileEndpoint = (FileEndpoint) exchange.getFromEndpoint();
        String movePath = fileEndpoint.getMove().evaluate(exchange, String.class);
        File inputDir = fileEndpoint.getFile();
        movedFile = new File(inputDir, movePath);
    }

}
谭翰海
2023-03-14

您可以尝试向exchange添加标头,例如:

。setHeader(“FILE\u PROCESSED”)。简单(“存档/${日期:现在:yyyyymmdd}/${文件:onlyname}”)

 类似资料:
  • 问题内容: 我想流式传输文件中包含的行,但是一旦处理完每个文件就将其移动到另一个文件夹。 当前的过程是这样的: 说明: 我创建的小号 我为他们每个人创建一个 我到线的 我打印每一行。 代码(为简单起见,省略了例外): 一旦每个文件都已被完全读取 ,是否可以 移动它 并继续处理流中的其他文件? 问题答案: 您可以将关闭动作链接到流,如果发生以下情况,该动作将自动执行: 状态文档很重要: 当在流上调用

  • 问题内容: 我已经使用spring-integration java dsl定义了一个流,以ftp传输文件,进行处理,然后将其传输回“存档”目录,最后将其移动到本地存档目录中。这是“相当容易”的: 如果我追加 在ftp适配器配置后,bean初始化程序将回复以下错误消息: 我该如何解决? 问题答案: 作为解决方法,我重构了代码,放弃了文件适配器: }

  • 我只使用一个名称运行FileInfo.MoveTo(“filename.txt”),而不是传递完整路径,文件就消失了。我相信在linux中,这将使它进入根目录“/”,但在Windows上,我不确定是否有根目录这样的东西,而不仅仅是C:有没有办法找到我丢失的文件?

  • 问题内容: 这个问题已经在这里有了答案 : 7年前关闭。 可能重复: 使用jQuery输入文件的完整路径 我有以下html元素 如果我用 我只是文件名,而不是文件的完整绝对路径。有人可以告诉我如何获得完整路径吗? 问题答案: 您不能这样做-由于安全问题,浏览器将不允许这样做。尽管有解决方法,但事实是您不应该依靠这种方法。以下堆栈溢出问题与此处相关: 使用jquery输入文件的完整路径 如何从Fir

  • 我想上传一个文件到我的数据库,上传后导入它,并最终将数据导出到我的数据库。我有上传工作只是罚款,但我不知道如何获得文件的绝对路径后,它被上传。我可以打印出文档的名称,但是如果上传了相同的文档名称,它会被附加,但是如果我调用,它仍然显示原始文件名。我能做些什么来获得绝对文件路径,然后调用一个函数来开始处理这个文件? 这就是我想要做的: 用户上传. csv文件 文件保存在db中(带有描述和文件路径。文