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 /