Jetty在多部分表单请求上抛出“多部分请求的缺少内容”
我正在使用servlet-api 3.0.1(javax.servlet:javax.servlet-api:3.0.1)运行Jetty 9(jetty-9.0.5.v20130815)服务器,我的servlet配置为接受多部分请求。
web.xml –
restapi org.springframework.web.servlet.DispatcherServlet 1 8428800 8428800 1048576
applicationContext.xml –
它实现了一个POST命令,它应该通过HttpServletRequest
接收文件上传。 但是当调用request.getParts()
时,会发生以下exception:
java.io.IOException: Missing content for multipart request at org.eclipse.jetty.util.MultiPartInputStreamParser.parse(MultiPartInputStreamParser.java:493) at org.eclipse.jetty.util.MultiPartInputStreamParser.getParts(MultiPartInputStreamParser.java:401) at org.eclipse.jetty.server.Request.getParts(Request.java:2077) at javax.servlet.http.HttpServletRequestWrapper.getParts(HttpServletRequestWrapper.java:351) at javax.servlet.http.HttpServletRequestWrapper.getParts(HttpServletRequestWrapper.java:351)
客户端是使用ASIFormDataRequest的iOS应用程序,但我不认为客户端有问题,因为它曾经使用过Apache commons-fileupload.jar。 我没有切换服务器使用Jetty的多部分支持来接收文件。
这是请求,由代理拦截 –
POST /mycommand HTTP/1.1 Host: localhost:8080 Proxy-Connection: close Accept-Encoding: gzip Content-Type: multipart/form-data; charset=utf-8; boundary=0xKhTmLbOuNdArY-849F4DA3-85DC-46F1-B182-44257808F0B9 Content-Length: 1568 Connection: close --0xKhTmLbOuNdArY-849F4DA3-85DC-46F1-B182-44257808F0B9 Content-Disposition: form-data; name="param1" text --0xKhTmLbOuNdArY-849F4DA3-85DC-46F1-B182-44257808F0B9 Content-Disposition: form-data; name="data"; filename="file" Content-Type: application/octet-stream ... DATA ... --0xKhTmLbOuNdArY-849F4DA3-85DC-46F1-B182-44257808F0B9--
有任何想法吗?
我们遇到了完全相同的问题,经过几个小时的调试后我们发现了问题。
Jetty抱怨因为包含mulitpart消息的InputStream为空。 对我们来说问题是两个Servlet 3.0样式的多部分都已配置(正如你在web.xml
使用multipart-*
标签),并且Spring被配置为使用Commons FileUpload进行多部分解析。 这导致Commons FileUpload在Jetty在MultiPartInputStreamParser
中执行之前使用InputStream
解决这个问题的方法就是从类路径中删除Commons FileUpload,并将Spring配置为不使用它。
"Missing content for multipart request"
的错误是由于第一个边界丢失或检测不到造成的。
Jetty补偿了许多边缘情况(来自客户端的多部分消息格式错误)。 但是,您提供的信息不足以了解潜在原因可能是什么。
你可以在RT / Jetty下的bugs.eclipse.org上通过wireshark捕获流量来提交错误吗?
对于春季启动应用我发现了同样的问题。 我删除Commons FileUpload lib并添加到属性:
multipart: maxFileSize: 32Mb maxRequestSize: 32Mb
用于大小文件
就我而言,我有以下几点; 当我评论下面的行时
org.springframework.web.servlet.DispatcherServlet
评论后它起作用…..
default org.apache.catalina.servlets.DefaultServlet debug 0 listings false 1 52428800 52428800 0 default *.ico *.png *.jpg *.htc *.gif *.swf *.wmf *.pdf *.css *.js *.json *.otf *.eot *.svg *.ttf *.woff /files/original/* dispatcher org.springframework.web.servlet.DispatcherServlet 2 dispatcher *.html *.txt *.xml /