我正在升级使用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
答案 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"/>