[英]Camel send multipart/form-data request
我有一個應用程序,它發送一個 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 發送工作正常。 我在將駱駝發送器與駱駝接收器集成在一起時遇到了麻煩。
這是發件人路線:
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
但找不到解決辦法
駱駝版本:org.apache.camel:camel-cxf:2.21.0.000033-fuse-000001-redhat-1
您需要使用正確的邊界設置Content-Type
標頭,這是在MultipartEntityBuilder
生成的。 修改您的發件人處理器以設置此標頭。
HttpEntity resultEntity = multipartEntityBuilder.build();
exchange.getOut().setHeader(Exchange.CONTENT_TYPE, resultEntity.getContentType().getValue());
exchange.getOut().setBody(resultEntity.getContent());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.