Как я могу использовать верблюжий http-компонент для загрузки файла в приложение, работающее на сервере Apache Tomcat? - PullRequest
3 голосов
/ 28 ноября 2011

Мое требование - создать маршрут «файл-http» для загрузки файла из файлового компонента на http-сервер с использованием http-компонента.Я также хочу знать, как работает этот верблюжий компонент http.Можем ли мы использовать верблюжий компонент http для загрузки файла на http-сервер.

Ответы [ 2 ]

3 голосов
/ 28 ноября 2011

Это будет зависеть от того, как вы хотите отправить содержимое файла.Например, допустим, у вас есть несколько строк в CSV, которые нужно разместить в форме HTML.Скорее всего, вы построите маршрут, например:

  • От: извлечение файла по заданному пути
  • Кому: преобразование данных из файла в соответствующие заголовки HTTP (простой POJOможет сделать это хорошо)
  • Кому: Отправить это через POST по HTTP

Если вы хотите загрузить весь файл, вы, скорее всего, вместо этого смотрите HTTP PUT, который можеттакже будет выполняться компонентом.Возможно, вы захотите установить файл в качестве вложения в Сообщение, а затем отправить его компоненту HTTP, используя PUT.

Документация по компоненту предоставляет лучший обзор на http://camel.apache.org/http4.html - но, похоже, вашсамым большим ограничением будет то, что может сделать файловый компонент потребитель и что он должен опросить - подробности см. http://camel.apache.org/file2.html.

2 голосов
/ 14 июля 2016

В зависимости от вашего HTTP-сервера, вам придется использовать разные подходы. Если у вас есть заданная ситуация (сервер Jetty), вы можете использовать компонент HTTP4 для загрузки файла:

from("jetty:http://localhost:8081/upload?httpMethodRestrict=PUT")
    .log("Uploaded ${body}");

from("file:src/data/jetty?delay=5000&noop=true")      
    .setHeader(Exchange.HTTP_METHOD, constant(HttpMethods.PUT))
    .to("http4://localhost:8081/upload");

Однако, если сервер принимает только многокомпонентные запросы, вам придется стать немного хитрее, например. используйте что-то вроде этого:

from("file:src/data/jersey?delay=5000&noop=true")
    .process(new Processor() {
        public void process(Exchange exchange) throws Exception {
            MultipartEntityBuilder multipartEntityBuilder = 
                MultipartEntityBuilder.create();
            multipartEntityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
            multipartEntityBuilder.addPart("username", username);
            multipartEntityBuilder.addPart("password", password);

            String filename = (String) 
                exchange.getIn().getHeader(Exchange.FILE_NAME);
            File file = exchange.getIn().getBody(File.class);
            multipartEntityBuilder.addPart("upload",
                new FileBody(file, MULTIPART_FORM_DATA, filename));

            exchange.getIn().setBody(multipartEntityBuilder.build());
        }
    })
    .to("http4://localhost:8080/restwb/upload");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...