Mule 3.7.0:使用新的 http 连接器和球衣上传多部分文件
Mule 3.7.0: Multipart file upload with new http connector and jersey
我正在升级一个应用程序,该应用程序使用 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 Bad Request 错误。将此功能迁移到新实现的正确方法是什么?提前致谢。
上传请求如下:
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
没有日志很难知道问题出在哪里。但是,为什么要为此使用运动衫?您只需使用 http 连接器即可在多部分请求中上传文件。查看此页面以获取有关如何构建多部分请求的信息:https://docs.mulesoft.com/mule-user-guide/v/3.7/http-request-connector
如果您仍然有充分的理由继续使用 Jersey,请确保为 Jersey 启用了 jersey 多部分支持(考虑到 Jersey 在 Mule 3.6 中进行了升级)
我通过在 http 侦听器上设置 parseRequest="false" 解决了这个问题
<http:listener config-ref="HttpListenerConfig" path="/*" parseRequest="false"/>
我正在升级一个应用程序,该应用程序使用 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 Bad Request 错误。将此功能迁移到新实现的正确方法是什么?提前致谢。
上传请求如下:
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
没有日志很难知道问题出在哪里。但是,为什么要为此使用运动衫?您只需使用 http 连接器即可在多部分请求中上传文件。查看此页面以获取有关如何构建多部分请求的信息:https://docs.mulesoft.com/mule-user-guide/v/3.7/http-request-connector
如果您仍然有充分的理由继续使用 Jersey,请确保为 Jersey 启用了 jersey 多部分支持(考虑到 Jersey 在 Mule 3.6 中进行了升级)
我通过在 http 侦听器上设置 parseRequest="false" 解决了这个问题
<http:listener config-ref="HttpListenerConfig" path="/*" parseRequest="false"/>