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

使用Apache Camel文件组件传输文件

计和顺
2023-03-14
package com.example.demo.controller;

import java.util.HashMap;
import java.util.Map;

import org.apache.camel.ProducerTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/camel")
public class FileTransferController {

    @Autowired private ProducerTemplate producerTemplate;

    @RequestMapping(value="/file", method=RequestMethod.GET)
    public String callCamelRoute() {
        String fileName = "input2.txt";

        Map<String, Object> headerMap = new HashMap<String, Object>();
        headerMap.put("fileName", fileName);

        producerTemplate.sendBodyAndHeaders("direct:transferFile", null, headerMap);

        return "Route invoked";
    }

}
package com.example.demo.route;

import org.apache.camel.LoggingLevel;
import org.apache.camel.builder.RouteBuilder;
import org.springframework.stereotype.Component;

@Component
public class FileTransferRoute extends RouteBuilder {

    @SuppressWarnings("deprecation")
    @Override
    public void configure() {
        errorHandler(defaultErrorHandler()
            .maximumRedeliveries(3)
            .redeliverDelay(1000)
            .retryAttemptedLogLevel(LoggingLevel.WARN));

        from("direct:transferFile")
            .log("Route reached")
            .log("file:C:\\CamelDemo\\inputFolder?fileName=${in.headers.fileName}&noop=true")
            .pollEnrich("file://C:/CamelDemo/inputFolder?fileName=${in.headers.fileName}&noop=true")
            .to("file://C:/CamelDemo/outputFolder?autoCreate=false")
        .end();
    }

}

但是,当我第一次调用此路由时,即使指定了fileName参数,文件input1.txt也会被传输。请帮忙。

共有1个答案

何勇
2023-03-14

我认为问题在于没有设置文件名,因为您没有告诉Camel您使用的是一个简单的表达式,而不是一个固定的URI。

查看手册(https://camel.apache.org/manual/latest/pollencric-eip.html#_using_dynamic_uris),它暗示您需要

.pollEnrich().simple("file://C:/CamelDemo/inputFolder?fileName=${in.headers.fileName}&noop=true")

以便能够使用动态终结点。

 类似资料:
  • 我需要将文件从文件夹同步到restendpoint。因此,如果文件被放置在特定文件夹中,我需要将该文件发送到接受多部分文件的RESTendpoint。我正在使用ApacheCamel来实现这一点。 RESTendpoint在Spring中编写,如下所示: 我是Camel的新手,并且已经弄清楚了如何通过构建路由并获取文件来轮询目录,但是我无法弄清楚如何使用此路由将此文件放入其余endpoint。这是

  • 问题内容: 我一直在到处寻找有关制作组件的帮助,以帮助管理从React到我已设置的端点的文件上传。 我尝试了许多选项,包括集成filedropjs。我决定反对,因为我无法控制它在DOM中设置的元素 这是我到目前为止的内容: 如果有人可以将我指向正确的方向,我会发送一些虚拟的拥抱。我已经对此进行了广泛的研究。我觉得我已经接近了,但还没到那儿。 谢谢! 问题答案: 我也为此工作了一段时间。这是我想出的

  • 我想使用FormData将图像上传到我的后端,但由于Ionic DEVAPP和Ionic VIEW不支持文件、文件传输和文件上传插件,我只需要使用Angular Http或HttpClient即可。 当使用DestinationType.FILE_URI时,我可以从文件中获取内部url并将其显示在img对象上,但如果没有本机文件、文件路径和文件传输插件,我无法从该url创建打字脚本文件对象。 }

  • swoole提供了文件上传模块,可以自动处理来自HTTP POST的文件上传。在Controller中调用 $this->upload->save('Upfile_key'); //需要生成缩略图 $this->upload->thumb_width = 136; //缩略图宽度 $this->upload->thumb_height = 136; //缩略图高度 $this->upload->t

  • 问题内容: 我有一个200MB的文件,想通过下载提供给用户。但是,由于我们希望用户仅下载一次此文件,因此我们这样做: 强制下载。但是,这意味着整个文件必须加载到内存中,这通常不起作用。我们如何以每块kb的速度将文件流式传输给他们? 问题答案: 尝试这样的事情

  • 下面的代码展示了如何使用一个通用的多路上传解析器CommonsMultipartResolver: <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 支持的其中一个属性,支持的最大文件大小,以字节为单位 -->