#upload #apache-camel #quarkus #put
#загрузка #апач-верблюд #кваркус #класть
Вопрос:
Я изо всех сил пытался заставить демо-версию работать с помощью camel и Quarkus, где я читал локальный файл и помещал его в конечную точку. У кого-нибудь есть какая-либо помощь, которую они могут оказать, чтобы правильно загрузить файл в конечную точку с помощью Quarkus? Ошибка, которую я продолжаю получать, такова No Content to map due to end-of-input at [Source: (org.apache.camel.converter.stream.InputStreamCache); line 1, column: 0]
. Пример кода, который я запускаю, приведен ниже.
package com.me.demo; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.camel.Exchange; import org.apache.camel.Processor; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.jackson.JacksonDataFormat; import org.apache.camel.model.rest.RestBindingMode; import org.apache.camel.processor.aggregate.tarfile.TarAggregationStrategy; import io.netty.handler.codec.http.HttpMethod; /** * Camel route definitions. */ public class Routes extends RouteBuilder { @Override public void configure() throws Exception { restConfiguration().bindingMode(RestBindingMode.json); rest("/demo/push") .post() .consumes("application/json") .type(demoPush.class) .route() .setHeader("uploadUrl", "http://localhost:8080/uploadFile")) .removeHeaders("CamelHttp*") .setHeader("FILE_PATH", simple("{{file.location}}")) .process(new Processor() { @Override public void process(Exchange exchange) throws Exception { byte[] fileBytes = Files.readAllBytes(Paths.get(exchange.getIn().getHeader("FILE_PATH") "/demo.tar.gz")); exchange.getIn().setBody(fileBytes, byte[].class); } }) .marshal().mimeMultipart("mixed") .setHeader("Content-Type", constant("application/octet-stream")) .setHeader(Exchange.HTTP_METHOD, constant("PUT")) .toD("${header.uploadUrl}") .convertBodyTo(String.class) .unmarshal().json() .end(); } }
Комментарии:
1. В документе говорится: «Опция маршала формата mime-составных данных преобразует сообщение с вложениями в MIME-составное сообщение». У вас нет привязанностей ! Попробуйте установить значение «multipartWithoutAttachment» в значение true