gpt4 book ai didi

java - Camel 发送多部分/表单数据请求

转载 作者:行者123 更新时间:2023-11-30 06:03:55 27 4
gpt4 key购买 nike

我有一个发送 multipart/form-data 的应用程序和一个接收 multipart/form-data 请求的应用程序。

在接收端处理:

    InputStreamCache postBody = exchange.getIn().getBody(InputStreamCache.class);
MultipartUploadContext mux = new MultipartUploadContext(postBody, exchange.getIn().getHeader("Content-Type",String.class));
Map<String,Object> params = mux.parseRequest();

解析请求,从 Postman/Swagger 发送工作正常。我在将我的 Camel 发送器与我的 Camel 接收器集成时遇到了麻烦。

这是发件人路线:

from("direct:uploadFileToRest").routeId("uploadFileToRest").
process("uploadFileRequestProcessor").
setHeader(Exchange.HTTP_METHOD, simple("POST")).
setHeader(Exchange.CONTENT_TYPE, constant("multipart/form-data")).
to("myrecieverapp/full_upload").
id("fileUploadRestSending").
log(LoggingLevel.DEBUG, "RESPONSE BODY ${body}").
end();

发送者处理器:

MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder
.create()
.addTextBody("name", "SomeName")
.addBinaryBody("content", array_with_byte_content_here);
exchange.getOut().setBody(multipartEntityBuilder.build());

出现以下错误:

 No body available of type: java.io.InputStream but has value: org.apache.http.entity.mime.MultipartFormEntity@35315261 of type: org.apache.http.entity.mime.MultipartFormEntity on: Message[ID-VRN26-1529401997491-0-3]. Caused by: No type converter available to convert from type: org.apache.http.entity.mime.MultipartFormEntity to the required type: java.io.InputStream with value org.apache.http.entity.mime.MultipartFormEntity@35315261.

在查找相同的问题后,我发现了将 body 更改为的建议:

 exchange.getOut().setBody(multipartEntityBuilder.build().getContent());

但是,它会导致接收方出现问题:

the request was rejected because no multipart boundary was found\r\n\tat org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:990)\r\n\tat org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:310)\r\n\tat org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:334)\r\n\tat ru.cinimex.abb.fileuploader.util.MultipartUploadContext.parseRequest(MultipartUploadContext.java:29)\r\n\tat ru.cinimex.abb.fileuploader.camel.processors.ValidateFullUploadRequestProcessor.process(ValidateFullUploadRequestProcessor.java:33)\r\n\tat org.apache.camel.processor.DelegateSyncProcessor.process(DelegateSyncProcessor.java:63)\r\n\tat org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548)\r\n\tat 

我读过这些帖子:

http://hilton.org.uk/blog/camel-multipart-form-data

Apache Camel multipart route

但找不到解决方案

Camel 版本:org.apache.camel:camel-cxf:2.21.0.000033-fuse-000001-redhat-1

最佳答案

您需要为 Content-Type header 设置正确的边界,它在 MultipartEntityBuilder 中生成。修改您的发件人处理器以设置此 header 。

HttpEntity resultEntity = multipartEntityBuilder.build();
exchange.getOut().setHeader(Exchange.CONTENT_TYPE, resultEntity.getContentType().getValue());
exchange.getOut().setBody(resultEntity.getContent());

关于java - Camel 发送多部分/表单数据请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50925694/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com