Mule 3.7.0:使用新的http连接器和球衣上传多部分文件

时间:2015-11-17 20:08:48

标签: file http upload jersey mule

我正在升级使用http和jersey的应用程序将文件上传到Mule 3.7.0并迁移到新的HTTP实现。在更新之前,我可以使用以下配置上传文件

<http:connector name="HttpConnector" >
    <service-overrides messageFactory="org.mule.transport.http.HttpMuleMessageFactory"
        sessionHandler="org.mule.session.NullSessionHandler" />
</http:connector>

<flow name="UploadFlow">
    <http:inbound-endpoint address="http://0.0.0.0:8095/sds" connector-ref="HttpConnector"/>
    <jersey:resources>
        <component>
            <spring-object bean="FileUploadResource" />
        </component>
    </jersey:resources>
</flow>

其中FileUploadResource是

@POST
@Path("module/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.TEXT_PLAIN)
public Response uploadModule(@FormDataParam("file") final InputStream is,
        @FormDataParam("file") FormDataContentDisposition fileDetails) throws IOException {

    String filename = fileDetails.getFileName();
    .....
}

更新的配置如下

<http:listener-config name="HttpListenerConfig" host="0.0.0.0" basePath="/sds" port="8095"/>

<flow name="UploadFlow">
    <http:listener config-ref="HttpListenerConfig" path="/*"/>
    <jersey:resources>
        <component>
            <spring-object bean="FileUploadResource" />
        </component>
    </jersey:resources>
</flow>

和FileUploadResource不变。尝试上传文件时,收到HTTP 400错误请求错误。将此功能迁移到新实现的正确方法是什么?提前谢谢。

上传请求如下:

Host: 192.168.29.129:8095
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:42.0) Gecko/20100101 Firefox/42.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://192.168.29.129:8090/mule/
Content-Length: 56068
Content-Type: multipart/form-data; boundary=---------------------------   12776546320886
Origin: http://192.168.29.129:8090
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

2 个答案:

答案 0 :(得分:0)

很难知道没有日志的问题。但是,为什么要使用球衣呢?您只需使用http连接器即可在多部分请求中上传文件。查看此页面,了解有关如何构建多部分请求的信息:https://docs.mulesoft.com/mule-user-guide/v/3.7/http-request-connector

如果你仍然有令人信服的理由留在泽西岛,请确保为泽西岛启用泽西多部分支持(记录泽西岛升级为蒙太奇3.6)

答案 1 :(得分:0)

我通过设置parseRequest =&#34; false&#34;解决了这个问题。在http监听器上

<http:listener config-ref="HttpListenerConfig" path="/*" parseRequest="false"/>