通过 mule esb 转发多部分请求

Forwarding a multipart request trough mule esb

我正在使用 http 出站端点来调用需要处理在多部分请求中发送到 mule 的文件的单独服务。这是一个例子

<http:outbound-endpoint connector-ref="serviceConnector"
                address="http://${serviceHost}:${servicePort}/upload"
                method="POST"
                responseTimeout="${endpointTimeout}"
                mimeType="multipart/form-data">

我遇到的问题是,当调用此服务时,我收到一个 FileUploadException,说明请求被拒绝,因为没有找到多部分边界。

我一直在试验这个问题并查看不同的问题,但 none 似乎解决了这个问题。

Mule ESB and "multipart/form-data"

https://www.mulesoft.org/jira/browse/MULE-6917

我也试过像这个问题中解释的那样改变连接器:Send file to Mule inbound-endpoint 但没有成功。

有什么想法吗?

谢谢

您没有显示足够的流量来真正确定缺少什么,但乍一看,我会说您没有在出站请求中设置 boundary 属性 Content-Type header.

阅读以下内容以更好地理解 multipart/form-data 请求的工作原理:http://chxo.com/be2/20050724_93bf.html

最后这个问题是通过创建一个自定义处理器来解决的,该处理器解析传入的请求,将其拆分为多个部分并手动读取各个部分输入流的字节并将读取的字节设置为附加到信息。代码:

 InputStream in = message.getPayload( InputStream.class );
 MultiPartInputStream multiIn = new MultiPartInputStream( in, contentType, null );
try
    {
        Collection<Part> parts = multiIn.getParts();

        for ( Part part : parts )
        {
           if ( part instanceof MultiPart )
                {
                    is = part.getInputStream();
                    ByteArrayOutputStream buffer = new ByteArrayOutputStream();
                    byte[] isByteArray = new byte[1024];
                    int numberRead;
                    while ( (numberRead = is.read( isByteArray ) ) != -1 ){
                        buffer.write(isByteArray, 0, numberRead);
                    }
                    byte[] bytesRead = buffer.toByteArray();
                    DataHandler attachment = new DataHandler(new ByteArrayDataSource( bytesRead, "application/octet-stream")); 
                    message.addOutboundAttachment( part.getName(), attachment );
                }
         }
   }...handle exceptions etc...

希望这对某人有所帮助!