Jetty lança “Conteúdo ausente para solicitação de várias partes” em solicitação de formulário multiparte

Estou executando o servidor Jetty 9 (jetty-9.0.5.v20130815) com servlet-api 3.0.1 (javax.servlet: javax.servlet-api: 3.0.1), meu servlet está configurado para aceitar solicitações multipartes.

web.xml –

  restapi org.springframework.web.servlet.DispatcherServlet  1   8428800 8428800 1048576    

applicationContext.xml –

     

Ele implementa um comando POST que deve receber um upload de arquivo por meio de HttpServletRequest . Mas quando request.getParts() é chamado, esta exceção ocorre:

 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) 

O cliente é um aplicativo para iOS que usa o ASIFormDataRequest, mas não acho que o cliente tenha o problema porque costumava trabalhar com o Apache commons-fileupload.jar. Eu não estou trocando o servidor para usar o suporte multipart do Jetty para receber arquivos.

Aqui está o pedido, como interceptado por um proxy –

 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-- 

Alguma ideia?

Nós tivemos exatamente o mesmo problema, e depois de algumas horas de debugging, encontramos o problema.

O Jetty reclama porque o InputStream que contém a mensagem mulitpart está vazio. O problema para nós era que ambos os multipart do Servlet 3.0 eram configurados (como você fez com as tags multipart-* no web.xml ), e o Spring foi configurado para usar o Commons FileUpload para análise multipartes. Isso fez com que o Commons FileUpload consumisse o InputStream antes que o Jetty o fizesse no MultiPartInputStreamParser

A solução para isso é simplesmente remover o Commons FileUpload do classpath e configurar o Spring para não usá-lo.

O erro de "Missing content for multipart request" é devido a um primeiro limite ausente ou mal detectado.

Tem havido numerosos casos de borda (de clientes que formatam mal as mensagens com várias partes) que o Jetty compensa. No entanto, as informações que você forneceu são insuficientes para saber qual é a causa subjacente.

Você pode arquivar um bug em bugs.eclipse.org sob RT / Jetty com uma captura de tráfego do wireshark?

para aplicação de boot de spring eu encontrei o mesmo problema. Eu removi o Commons FileUpload e adicionei às propriedades:

 multipart: maxFileSize: 32Mb maxRequestSize: 32Mb 

para arquivos de tamanho

No meu caso eu tive o seguinte; quando eu comentei as linhas abaixo em

org.springframework.web.servlet.DispatcherServlet

Funcionou ….. depois de comentar

   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 /  
    Intereting Posts